вторник, 9 ноября 2010 г.

Часть вторая. Doctrine2 (entity) в Symfony 2.

В этот статье пойдёт речь о сохранении данных, при помощи Doctrine2.
Итак, как мы помним у нас есть entity User. Состоит она у нас из свойств name и surname. Что же нам необходимо для сохранения полученных данных в нашу таблицу?
  1. Entity manager
  2. Необходимо заполнить свойства Entity необходимыми данными.
Entity manager - доступен в контроллере. Ну а к какому бандлу и имя entity мы уже знаем. Осталось только реализовать это, а реализовывается это очень просто. Итак давайте представим, что мы получили данные и присвоили их переменным name и surname

на этот раз для ускорения процесса, рассмотрим пример сохранения данных в самом контроллере

<?php
use Application/HelloBundle/Entity/User;
...
class SomeController extends Controller{
   public function someAction(){
      ...
      //Получаем entity manager
      $em = $this['doctrine.orm.entity_manager'];
      $user_entity = new User();
      //добавляем к нашей entity необходимые данные
      $user_entity->setName($name);
      $user_entity->setName($surname);
      //сохраняем данные
      $em->persist($user_entity);
      $em->flush();
      ...
  }
}
Как видно из примера ничего сложного нет.
Для обновления, удаления записи в таблице необходимо
  1. Entity manager
  2. Заполнить свойства Entity необходимыми данными.
  3. Знать имя entity и бандл к которому она принадлежит
в нашем случае это будет выглядеть следующим образом
<?php
...
$query = 'UPDATE HelloBundle:User u SET u.name = :name WHERE u.id = :id';
$update_query = $em->createQuery($query)
                   ->setParameter('name', $name)
                   ->setParameter('id', $id);
$update_query->getResult();
Как видно из примера необходимо указать бандл, а через двоиточие entity, так же необходимо создать alias для таблицы.
Запрос для удаления выглядит следующим образом
<?php
...
$query = 'DELETE HelloBundle:User u WHERE u.id = :id';
$delete_query = $em->createQuery($query)
                   ->setParameter('id', $id);
$delete_query->getResult();
Happy coding!
Болше о DQL можно прочитать на официальном сайте Doctrine2

Комментариев нет:

Отправить комментарий