实体“资产”与“logEntries”相关联。 每个资产可能有0..N个日志条目。
每个日志条目的一部分是字段(或属性)“status”。 每个资产的当前状态在其最新的日志条目中定义。 如果没有与资产关联的日志条目,则其状态未知。
目前,我正计算每种状态的资产。状态的一个示例是:“可用”。
问题在于:
我正在尝试以下代码:
$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而不是错误:)
答案 0 :(得分:1)
如果我理解你的问题,你就不能在关联实体中添加一个createdAt字段,如下所示:
/**
* @ORM\Entity()
* @ORM\HasLifecycleCallbacks()
*/
class YourClass
{
protected $asset_id;
protected $log_id;
/**
* @ORM\Column(type="datetime")
*/
protected $createdAt;
/**
* @ORM\PrePersist
*/
public function prePersist()
{
$this->createdAt = new \DateTime('now');
}
}
然后你可以按日期排序并抓住最新的条目。