Active record (Eloquent) trong Laravel và Data Mapper (Doctrine) trong Symfony
Khi tao tác với DB trong Laravel và Symfony, có thể bạn sẽ làm việc với Eloquent hoặc Doctrine.
Vậy sự khác nhau là gì
| Active Record | Doctrine | |
| class User extends Eloquent { } Như vậy active record là một object được kế thừa từ Eloquent | use Doctrine\ORM\Mapping AS ORM; /** * @ORM\Entity * @ORM\Table(name="users") */ class User { /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(type="string") */ private $name; } Trong doctrine, data mapper thực chất là 1 PHP Opject đơn thuần | |
| $user = User::find(123); $user->name = 'Philip Brown'; $user->save(); Khi thao tác với DB, các dùng active record khác trực quan và đơn giản vì bản thân class User được kế thừa từ Eloquen, nên bạn có thể thao tác trực tiếp với DB thông qua Class User Câu lệnh save ở trên đã thực sự thao tác với DB, và thay đổi dữ liệu trong DB. | $user = new User; $user->setName('Philip Brown'); EntityManager::persist($user); EntityManager::flush(); Khi muốn thao tác với DB, bạn phải thông qua EntityManager Chú ý ở đây là câu lệnh flush. Câu lệnh flush mới thực sự lưu dữ liệu vào DB. Câu lệnh flush này kết thúc 1 unit of work, hay có thể hiểu là 1 transaction trong DB | |
| Khi làm việc với Doctrine, chúng ta sẽ quen với khái niệm Repository Pattern $userRepo = EntityManager::getRepository('User') userRepo này thực chất là 1 PHP Object, không chứa dữ liệu, nhưng có cung cấp 1 số method để chúng ta thao tác với dữ liệu như find, findOneBy,... |
Comments
Post a Comment