a对Doctrine Query和QueryBuilder有一些疑问 .
我曾经在Repository中使用简单的Query,例如:
$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类的createQuery函数 .
谢谢!
1 回答
回答你的第一个问题,差异,一般学说条款如下:
Query 是表示DQL查询的对象 . 它上面的方法主要涉及水化和获取查询结果等内容: getResult(),getArrayResult(),getSQL()
QueryBuilder 是构建DQL查询的流畅方式 . 这些方法主要涉及添加/更改DQL子句:例如select(),from(),where()
但是,我不确定从ModelManagerInterface :: createQuery()返回的Sonata ProxyQueryInterface .