1

实体“资产”与“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 而不是错误:)

4

1 回答 1

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');
    }
}

然后您可以简单地按日期排序并获取最新条目。

于 2013-06-12T22:48:10.657 回答