Intereting Posts
Использовать счетчик как часть переменной Как получить длину самой длинной строки в массиве Ошибка php cURL в facebook api В чем смысл значений, возвращаемых функцией trader_bbands ()? Как объединить несколько изображений и текст в одно изображение? PHPExcel Как получить только 1 значение ячейки? Syntastic for Vim: Каковы требуемые строки в ~ / .vimrc? (Проверка ошибок PHP) Ошибка PHP Parse: синтаксическая ошибка, неожиданный '!' в Игнорировать чувствительность к регистру при сравнении строк в PHP Генерация DomPDF для китайских символов Как я могу реализовать единый вход (SSO) с использованием Microsoft AD для внутреннего PHP-приложения? php simple xml, как читать несколько узлов с разными уровнями дочерних узлов Как отобразить страницу 404 Apache по умолчанию в PHP Строковое сходство в PHP: функция типа levenshtein для длинных строк Могу ли я использовать автономный уровень базы данных Laravel?

CodeIgniter, модели и ORM, как с этим бороться?

Я начинаю с 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? и как я загружаю модели (свои классы) внутри контроллеров?

Solutions Collecting From Web of "CodeIgniter, модели и ORM, как с этим бороться?"

Вы, вероятно, хотите что-то вроде этого:

  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

http://codeigniter.com/wiki/ORM/

Для будущих Googlers, вот учебник, который я написал о том, как интегрировать CodeIgniter 2 с Doctrine 2.

Дайте мне знать, если у вас возникнут проблемы.

Мне повезло с использованием Propel с codeigniter.

проверьте GAS ORM, это звучит неплохо, удобно и легко. некоторые особенности этой реализации ORM для CodeIgniter:

  • Поддерживаемые базы данных: cubrid, mssql, mysql, oci8, odbc, postgre, sqlite, sqlsrv. (включая PDO, если вы продолжаете синхронизацию с репозиторией CI)
  • Поддержка нескольких подключений к базе данных.
  • Поддержка нескольких отношений.
  • Поддержка составных клавиш (для ключа, определяющего отношения).
  • Автоматическое создание моделей из таблиц базы данных и наоборот.
  • Автоматическая синхронизация моделей-таблиц путем создания файла миграции.
  • Кэширование по запросу.
  • Столбцы / данные самореференции и смежности (иерархические данные).
  • Eager Loading, чтобы максимизировать ваши запросы отношений (для повышения производительности).
  • Различные методы поиска (могут быть скованы большинством CI AR) и агрегатов.
  • Подбор валидации и автоматическое отображение ввода с минимальной настройкой.
  • Крючки указывают на контроль над вашей моделью.
  • Расширения для совместного использования общей функции / библиотеки в вашей модели.
  • Сделки и другие преимущества CI AR.
  • Включенный набор тестов phpunit для обеспечения большей степени согласованности API.

есть одна форма с поддержкой искры ->, поэтому ее легко установить

Вы хотите создать библиотеку, которая расширяет класс 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