Я начинаю с 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, а затем используя обычный конструктор PHP5 (__construct () вместо функции Car ()), но проблема в этом случае такова: как я обращаюсь к объекту $ 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.
посмотрите страницу вики-страницы codeigniter для ORM
Для будущих Googlers, вот учебник, который я написал о том, как интегрировать CodeIgniter 2 с Doctrine 2.
Дайте мне знать, если у вас возникнут проблемы.
Мне повезло с использованием Propel с codeigniter.
проверьте GAS ORM, это звучит неплохо, удобно и легко. некоторые особенности этой реализации ORM для CodeIgniter:
есть одна форма с поддержкой искры ->, поэтому ее легко установить
Вы хотите создать библиотеку, которая расширяет класс ActiveRecord. Некоторые люди опережают вас:
http://codeigniter.com/wiki/ActiveRecord_Class/
хорошие моды в теме, здесь:
http://codeigniter.com/forums/viewthread/101987/
Если вы ищете методы ORM, общие для вашего приложения, просто расширяйте класс ActiveRecord. Для моего приложения знание структуры таблицы позволяет мне создавать леса (автогенерирующие) формы и выполнять другое сопоставление. Я выполняю сопоставление API-API, поэтому я включаю метод GetStructure () в MyActiveRecord и строю другие вещи.
(RoR snickering теперь может отключиться)
Редактирование: пока я являюсь поклонником сферы и силы Доктрины, я думаю, что спрос на использование командной строки ставит ее вне духа CI. То, что подходит вам, это то, что подходит вам, но если я собираюсь использовать Доктрину, я могу использовать Symfony, верно? Или RoR, если на то пошло, правильно? Смотрите, где я гонг с этим? Правильный инструмент в нужное время.
Я использовал CodeIgniter с Propel, и они действительно хорошо смешивались. Я использовал это некоторое время и получил несколько webapps, работающих таким образом. Так как я нашел несколько ужасных способов сделать это (некоторые из них включают модификацию конфигурации Apache!). Я решил опубликовать сообщение в блоге о том, как это сделать. Вы можете прочитать его здесь .
Надеюсь, я могу помочь!
Я думаю, что php-activerecord – очень хороший элемент управления ORM. Я использовал его с Slim Framework несколько раз, и я думаю, что это была бы отличная альтернатива использованию родного модельного класса CI. Вот пример кода и ссылки:
$post = new Post(); $post->title = 'My first blog post!!'; $post->author_id = 5; $post->save();
PHP ActiveRecord
Я знаю, что это довольно старо, но для тех, кто просто использует codeigniter сейчас, и wannt, чтобы использовать orm с ним, можно использовать этот учебник для интеграции propel с codeigniter
http://llanalewis.blogspot.com/2013/06/installing-propel-in-codeigniter.html