实体“资产”与“logEntries”相关联。每个资产可能有 0..N 个日志条目。
每个日志条目的一部分是一个字段(或属性)“状态”。每个资产的当前状态在其最近的日志条目中定义。如果没有与资产关联的日志条目,则其状态未知。
目前我正在计算每个状态的资产。状态的示例是:“可用”。
问题是:
- 如果资产在过去有交替的状态值(它们几乎都这样做),那么这两种资产都会被计算不止一次
- 或者,我收到错误消息,因为我正在搜索每个资产的最新日志条目,但某些资产没有日志条目,并且 DQL 中的聚合函数失败
我正在尝试以下代码:
$qb = $this->_em->createQueryBuilder();
$qb->select('COUNT(a)')
->from('AppAssetBundle:Asset', 'a')
->leftJoin('a.logEntries', 'l')
->where('l.status = '.$status_id)
->andWhere('l.id = MAX(l.id)')
;
return $qb->getQuery()->getSingleScalarResult();
错误是:
SQLSTATE[HY000]:一般错误:1111 无效使用组函数
替换->andWhere()
为->having()
也不起作用。
有谁知道如何获得协会的最新实体(如果有) ?
如果没有关联的字段,我希望我的整个查询返回 0 而不是错误:)