对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。
谢谢!
答案 0 :(得分:0)
回答你的第一个问题,一般学说中的差异如下:
查询是表示DQL查询的对象。它上面的方法主要涉及水化和获取查询结果等内容: getResult(),getArrayResult(),getSQL()
QueryBuilder 是构建DQL查询的流畅方式。这些方法主要涉及添加/更改DQL子句:例如select(),from(),where()
但是,我不确定从ModelManagerInterface :: createQuery()返回的Sonata ProxyQueryInterface。