1

a 对 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')”来过滤要显示的实体,并且我必须像这样使用查询生成器:

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。

谢谢!

4

1 回答 1

0

回答你的第一个问题,一般学说的区别如下:

Query是表示 DQL 查询的对象。它上面的方法主要与水合和获取查询结果有关:例如getResult()、getArrayResult()、getSQL()

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

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

于 2013-04-10T16:51:12.077 回答