Doctrine - это полноценный ORM, который реализует шаблон активной записи.Класс активных записей CodeIgniter - это построитель запросов / оболочка базы данных, основанная на «измененной» версии шаблона.
Отказ от ответственности: Я никогда не использовал Doctrine.Я приложу все усилия, чтобы проиллюстрировать различия между реализацией активной записи CodeIgniter и Doctrine, основываясь на моем понимании.
Используя класс активной записи CodeIgniter, вы можете реализовать такую модель:
class User_model extends CI_Model
{
public function get_user_by_username($username)
{
// Build query using active record methods
$this->db->where('username', $username);
$this->db->where('active', 1);
// Execute query
$query = $this->db->get('users');
// Return results
return $query->result();
}
// ...
}
Вы в основном строите запрос, используя методы активной записи.Легко увидеть, как каждый метод (where()
, get()
и т. Д.) Сопоставляется с необработанным SQL.Преимущество использования методов активной записи по сравнению с $this->db->query()
заключается в том, что CodeIgniter компилирует каждый запрос на основе используемого вами драйвера базы данных.Помимо этого, активная реализация записи CodeIgniter на самом деле мало что делает.Любые запросы вам нужно будет создать.Я надеюсь, что проиллюстрировал, как методы активной записи похожи на построитель запросов.
Обратите внимание, что следующий пример кода может быть неправильным.Используя Doctrine, у вас может быть такая модель:
/** @Entity */
class User
{
/** @Column(type="integer") */
private $id;
/** @Column(length=50) */
private $username;
// ...
}
Затем, чтобы использовать модель и связанную функциональность активной записи, вы должны сделать что-то вроде этого:
// Instantiate object
$user = new User();
// Set properties
$user->username = 'some_username';
// Save object
$user->save();
// Access properties
echo $user->id;
Этопросто царапать поверхность с точки зрения того, что может сделать Доктрина.Вы можете установить значения по умолчанию для свойств или указать отношения между таблицами.Обратите внимание, что я не написал ни SQL, ни построил запрос.Я просто установил свойства объекта, а затем сохранил его.Doctrine позаботится обо всем остальном.
Обратите внимание, что Doctrine включает в себя свой собственный построитель запросов, поэтому он делает то же, что и активная запись CodeIgniter, и многое другое.
Использование Doctrine аналогично CakePHP илиРеализация шаблона активной записи в Ruby on Rails.Вы можете взглянуть туда для дополнительного понимания схемы.Примеры CakePHP могут быть особенно легко усвоены, если вы исходите из фона CodeIgniter.
Чтобы ответить на некоторые другие ваши вопросы, я не думаю, что есть что-то, что делает Doctrine лучше, чем методы активной записи CodeIgniter.Он может быть более продвинутым, но, как и любая другая библиотека, вы хотите выбрать лучший инструмент для работы.Если вы довольны активными методами записи CodeIgniter и не видите необходимости в расширенном ORM, пропустите его.