Mar*_*vić 2 sql group-by dql symfony doctrine-orm
我正在尝试将此(我的)SQL转换为DQL
SELECT content, created, AVG(rating)
FROM point
GROUP BY DAY(created)
ORDER BY created ASC
Run Code Online (Sandbox Code Playgroud)
我被困在GROUP BY部分,显然DAY/WEEK/MONTH不被认为是有效的"功能".
[语义错误]第0行,第80行附近'(p.created)ORDER':错误:无法按未定义的标识变量进行分组.
$this->createQueryBuilder('p')
->select('p')
->groupBy('DAY(p.created)')
->orderBy('p.created', 'ASC')
Run Code Online (Sandbox Code Playgroud)
问:是否可以使用查询构建器创建此类查询,还是应该使用本机查询?
在Doctrine 2.1中的GROUP BY查询中不可能使用自定义DAY/WEEK/MONTH用户函数.只支持SELECT查询(不确定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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3325 次 |
| 最近记录: |