在我的一个存储库中获得了这个QueryBuilder。
$query = $em->createQueryBuilder('d')
->select('d, i, u, SUM(CASE WHEN t.user = :userId THEN 1 ELSE 0 END) as myTickets')
->leftJoin('d.item','i')
->leftJoin('d.users','u')
->leftJoin('d.tickets','t')
->where('d.active = 1')
->andWhere('d.state = 1')
->setParameter('userId',$user->getId())
->orderBy('d.dateFinish', 'ASC');
当我执行代码时,MySQL会抛出这个错误。
Key" premium"对于带有键的数组" 0,myTickets"不存在
"溢价"是" d"。
的一个领域如何使用自定义SUM回收字段?
答案 0 :(得分:2)
由于您在查询中使用了聚合函数,因此您将获得所谓的mixed result
。混合结果通常会将使用FROM
子句获取的对象作为零索引[0]
返回。其余结果将根据您为自定义字段设置的别名进行填充。
$result[0]
将返回您要访问的对象。
$result['myTickets']
将返回聚合函数的结果。在这种情况下,它是SUM
。
文件引用:
SELECT u, UPPER(u.name) nameUpper FROM MyProject\Model\User u
此查询使用返回标量值的UPPER DQL函数,因为SELECT子句中现在有一个标量值,我们得到一个混合结果。
混合结果的惯例如下:
FROM子句中提取的对象始终使用键“0”定位。
每个没有名称的标量都按查询中给出的顺序编号,从1开始。
每个别名标量都以其别名作为关键字给出。保留名称的大小写。
如果从FROM子句中提取了多个对象,则它们会每行交替。
您可以阅读有关此主题的更多信息here.