2012-05-23 132 views
2

我试图把这种(我的)SQL来DQL翻译SQL查询来Doctrine2 DQL

SELECT content, created, AVG(rating) 
FROM point 
GROUP BY DAY(created) 
ORDER BY created ASC 

而且我被困在GROUP BY部分,显然是日/周/月没有被识别为有效的“功能”。

[语义错误] line 0,col 80 near'(p.created)ORDER':错误:无法通过未定义的标识变量进行分组。

$this->createQueryBuilder('p') 
     ->select('p') 
     ->groupBy('DAY(p.created)') 
     ->orderBy('p.created', 'ASC') 

问:是否有可能造成这种与查询生成器的查询,或者我应该使用本机查询?

+0

按照DQL文件,你就需要添加一个用户定义的函数来获取此功能。 –

回答

5

这是不可能的学说2.1使用自定义的天/周/月的用户功能在GROUP BY查询,只能选择查询的支持(不知道为2.2。?分支),所以我最终使用本地查询,并且一切正常。

代码的快速概述:

// creating doctrines result set mapping obj. 
$rsm = new Doctrine\ORM\Query\ResultSetMapping(); 

// mapping results to the message entity 
$rsm->addEntityResult('Omglol\AppBundle\Entity\Message', 'm'); 
$rsm->addFieldResult('m', 'id', 'id'); 
$rsm->addFieldResult('m', 'content', 'content'); 
$rsm->addFieldResult('m', 'rating', 'rating'); 
$rsm->addFieldResult('m', 'created', 'created'); 

$sql = "SELECT id, content, AVG(rating) as rating, created 
     FROM message 
     WHERE domain_id = ? 
     GROUP BY WEEK(created)"; 

$query = $this->_em->createNativeQuery($sql, $rsm); 
$query->setParameter(1, $domainId); 
$query->getResult();