Doctrine Query VS Query Builder Symfony 2.0

时间:2013-04-10 15:03:15

标签: symfony doctrine query-builder

对Doctrine Query和QueryBuilder有点怀疑。

我曾经在存储库中使用简单的查询,例如:

$em = $this->getEntityManager();
$dql = "select X from ApuestaBundle:Apuesta X  ORDER BY X.Jornada DESC";
$query = $em->createQuery($dql);
$entity = $query->getResult();

但我必须从Sonata的Admin类修改函数“createQuery($ context ='list')”来过滤要显示的实体,我不得不像这样使用Query Builder:

public function createQuery($context = 'list'){
     $query = $this->getModelManager()->createQuery($this->getClass(), 'entity');

     $query->select ('e');
     $query->from($this->getClass(), 'e');
     $query->from('CoreBundle\Entity\Resource', 'r');
     $query->where('e.id = r.id AND r.company = :company');
     $query->setParameter('company', 1);  

     return $query;
}

所以,这是我的问题,这是使用Query或QueryBuilder的不同之处。因为这样,我无法调用Repository的函数来更改Admin Class的函数createQuery。

谢谢!

1 个答案:

答案 0 :(得分:0)

回答你的第一个问题,一般学说中的差异如下:

查询是表示DQL查询的对象。它上面的方法主要涉及水化和获取查询结果等内容: getResult(),getArrayResult(),getSQL()

QueryBuilder 是构建DQL查询的流畅方式。这些方法主要涉及添加/更改DQL子句:例如select(),from(),where()

但是,我不确定从ModelManagerInterface :: createQuery()返回的Sonata ProxyQueryInterface。