Я запускаю с 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, Доктрина, 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);
}
И так далее... Проблема с этим подходом состоит в том, что, если var_dump () объекта $car, я вижу, что он содержит много материала от CodeIgniter, такого как объекты CI_Config, CI_Input, CI_Benchmark, и т.д. Поэтому, я думаю, что это не хорошее решение, потому что каждый объект моего класса Автомобиль, он будет содержать много повторных данных, (он будет иметь низкую производительность!), не так ли?
Не используя модели CodeIgniter
Я мог сделать свои модели, не расширяя их от Образцового класса CodeIgniter, и затем с помощью постоянного конструктора PHP5 (__ конструкция () вместо функционального Автомобиля ()), но проблема в этом случае: как я получаю доступ к объекту $db сделать запросы с помощью ActiveRecord CodeIgniter? и, как я загружаю модели (его классы) в контроллерах?
Вы, вероятно, хотите что-то подобное:
class Cars {
//List all neccessary vars here
function __construct() {
//get instance of Codeigniter Object and load database library
$this->obj =& get_instance();
$this->obj->load->database();
}
//You can now list methods like so:
function selectCar($name, $color) {
$this->obj->db->select('color')->from('car')->where('color', $color);
$query = $this->obj->db->get();
switch ($query->num_rows()) {
case 0:
return false;
break;
default:
return $query->result();
break;
}
}
надеюсь, что Помогает!
Попробуйте использовать Doctrine , это отличный ORM, который легко интегрируется в CodeIgniter.