Я начинаю с CodeIgniter, и после нескольких часов погружения в Google я немного смущен.
Попробуем объяснить мой вопрос простым примером: у меня есть таблица "автомобиль" с полями "имя" и "цвет". Поэтому я хочу иметь автомобиль класса php, чтобы мой код выглядел в конце концов следующим образом:
$car = new Car('BMW', 'red'); //new $car Object
$car->save(); //this will make an SQL insert to the table 'car'
//Lets query all cars
$cars = Car::get_all();
//cars will be an array of Car objects, (not a set of rows!)
Поэтому я ищу что-то довольно похожее на то, что у вас есть в RubyOnRails или Django (Python). Мне нужно обрабатывать все виды отношений и иметь возможность писать код в истинном способе OOP + MVC.
Это мои неудачные подходы для его получения:
Использование внешнего ORM (DataMapper, Doctrine, AcidCrud...)
Они либо требуют слишком большого количества настроек, либо плохо обрабатывают отношения.
Использование классов CodeIgniter (для расширения класса модели CodeIgniter)
class Car extends Model{
public function Car($name='',$color='')
{
$this->name = $name;
$this->color = $color;
parent::Model();
}
public function save()
{
$data = array(
'name' => $this->name ,
'color' => $this->color
);
$this->db->insert('cars' $data);
}
И так далее... Проблема с этим подходом заключается в том, что если a сделать var_dump() объекта $car, я вижу, что он содержит много вещей из CodeIgniter, таких как объекты CI_Config, CI_Input, CI_Benchmark и т.д. Поэтому я думаю, что это нехорошее решение, потому что каждый объект моего класса Car, он будет содержать много повторяющихся данных (он будет иметь низкую производительность!), не так ли?
Не использовать модели CodeIgniter
Я мог бы сделать свои модели без расширения их класса CodeIgniter Model, а затем использовать обычный конструктор PHP5 (__construct() вместо функции Car()), но проблема в этом случае заключается в следующем: как я получаю доступ к объекту $db делать запросы с помощью CodeIgniter ActiveRecord? и как я загружаю модели (свои классы) внутри контроллеров?