Doctrine orm Doctrine2:何时使用查询生成器以及它与其他生成查询的方法的区别?

Doctrine orm Doctrine2:何时使用查询生成器以及它与其他生成查询的方法的区别?,doctrine-orm,Doctrine Orm,条令2支持多种创建查询的方法 其中之一是通过实体经理的经典方式 $this->getEntityManager() ->createQuery('SELECT p FROM AcmeStoreBundle:Product p ORDER BY p.name ASC') ->getResult(); 另一个是使用查询生成器: $qb = $this->createQueryBuilder('c'); //...

条令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', '...');
我在想是否还有其他原因我更喜欢第一种或第二种方法来编写一个普通的查询

除本机查询外,是否还有其他方法可以在原则2中构建查询


编辑:我刚刚发现了一个类似的问题,但没有得到任何回答。

查询生成器所做的一切就是创建dql,因此两者之间没有功能上的区别。我总是使用查询生成器来避免生成长字符串,因为我发现代码更容易阅读。但这确实是一个品味的问题


如果您有一个存储库,那么查询生成器就不需要拼出根类名,即AcmeStoreBundle:Product。当然,要获得存储库,您可能无论如何都必须知道名称。

查询生成器所做的一切就是创建dql,因此两者之间没有功能上的区别。我总是使用查询生成器来避免生成长字符串,因为我发现代码更容易阅读。但这确实是一个品味的问题

如果您有一个存储库,那么查询生成器就不需要拼出根类名,即AcmeStoreBundle:Product。当然,要获得存储库,您可能必须知道其名称