doktryny jest pełnoprawnym ORM, który implementuje Active Record wzór. Aktywna klasa rekordu CodeIgniter to budowniczy zapytań/opakowanie baz danych oparte na "zmodyfikowanej" wersji wzorca.
Oświadczenie: Nigdy nie używałem Doctrine. Zrobię co w mojej mocy, aby zilustrować różnice między aktywną implementacją rekordu CodeIgniter a Doctrine, w oparciu o moje zrozumienie.
Korzystanie aktywną klasę rekordu CodeIgniter jest, można wdrożyć model takiego:
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();
}
// ...
}
Jesteś w zasadzie budowania kwerendy przy użyciu metod aktywnych rekordów. Łatwo zobaczyć, jak każda z metod (where()
, get()
, itp.) Mapuje do surowego kodu SQL. Zaletą korzystania z aktywnych metod zapisu w przeciwieństwie do zwykłego $this->db->query()
jest to, że CodeIgniter kompiluje każde zapytanie na podstawie używanego sterownika bazy danych. Poza tym aktywna implementacja rekordów CodeIgniter nie robi zbyt wiele. Wszelkie zapytania, które potrzebujesz, musisz utworzyć. Mam nadzieję, że zilustrowałem, w jaki sposób metody aktywnych rekordów są podobne do konstruktora zapytań.
Należy pamiętać, że poniższy przykładowy kod może być niepoprawny. Korzystanie z doktryny można mieć model takiego:
/** @Entity */
class User
{
/** @Column(type="integer") */
private $id;
/** @Column(length=50) */
private $username;
// ...
}
Następnie do korzystania z modelu i związane z aktywną funkcję nagrywania, byś zrobił coś takiego:
// Instantiate object
$user = new User();
// Set properties
$user->username = 'some_username';
// Save object
$user->save();
// Access properties
echo $user->id;
to tylko zarysowania powierzchni pod względem tego, co potrafi Doktryna. Możesz ustawić domyślne wartości właściwości lub określić relacje między tabelami. Zauważ, że nie napisałem żadnego SQL ani nie zbudowałem zapytania. Właśnie ustawiłem właściwości obiektu, a następnie go zapisałem. Doktryna zajmuje się resztą.
Należy pamiętać, że Doctrine zawiera własny kreator zapytań, więc w pewnym sensie robi to, co robi aktywny rekord CodeIgniter, i wiele więcej.
Używanie Doctrine jest podobne do implementacji aktywnego wzorca rekordu CakePHP lub Ruby on Rails. Możesz tam zajrzeć, by uzyskać dodatkowe informacje na temat wzoru. Przykłady CakePHP mogą być szczególnie łatwe do strawienia, jeśli pochodzisz z tła CodeIgniter.
Aby odpowiedzieć na niektóre z pozostałych pytań, nie sądzę, że jest coś, co czyni Doktrynę lepszą niż metody aktywnego rekordu CodeIgniter. Może być bardziej zaawansowany, ale jak każda inna biblioteka, chcesz wybrać najlepsze narzędzie do pracy.Jeśli jesteś zadowolony z aktywnych metod zapisu CodeIgniter i nie widzisz potrzeby zaawansowanej ORM, pomiń to.
Doctrine jest pełnowartościową ORM, która implementuje aktywny wzór rekordu. Aktywna klasa rekordu CodeIgniter to raczej narzędzie do budowania zapytań oparte na "zmodyfikowanej" wersji wzorca. – birderic
Witam birderic, Dzięki za szybką odpowiedź. Czy możesz podać mi przykład, w którym będzie to miało miejsce? Czy mówimy o takich operacjach jak CRUD? – MatthewSchenker
Napiszę dłuższą odpowiedź. Nie mam doświadczenia z Doctrine, ale postaram się jak najlepiej porównać te dwa. – birderic