Doctrine2: когда использовать построитель запросов и чем он отличается от других способов построения запроса? - PullRequest
1 голос
/ 06 марта 2012

Doctrine 2 поддерживает множество способов создания запроса.

Один из них - классический, через менеджер сущностей;

    $this->getEntityManager()
        ->createQuery('SELECT p FROM AcmeStoreBundle:Product p ORDER BY p.name ASC')
        ->getResult();

А другой - с помощью построителя запросов:

    $qb = $this->createQueryBuilder('c');
    //...
       ->leftJoin('c.city_state', 's')
       ->where("CONCAT(c.name) LIKE :$field")
       ->setParameter("$field", "%$smartbox%", \PDO::PARAM_STR)
       ->setMaxResults($limit);

На первый взгляд, единственная причина, по которой я бы использовал последний, - это помощь в построении условных запросов.

if($value == 'something')
   $qb->add('where', '...');

Я бродил, есть ли другие причины, которые я бы предпочелпервый или второй способ написать обычный запрос?

И есть ли альтернативные способы создания запроса в Doctrine 2 (кроме собственных запросов)?

Редактировать: я только что нашел похожеевопрос здесь , но ответ не был принят.

1 Ответ

4 голосов
/ 06 марта 2012

Все, что делает построитель запросов - это создает dql, поэтому между ними нет функциональной разницы.Я всегда использую конструктор запросов, чтобы избежать необходимости создавать длинные строки и потому, что я считаю, что код легче читать.Но это действительно вопрос вкуса.

А если у вас есть репозиторий, тогда построитель запросов устраняет необходимость указывать имя корневого класса (т. Е. AcmeStoreBundle: Product).Конечно, чтобы получить хранилище, вам, вероятно, все равно нужно было знать имя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...