Symfony Doctrine Query Builder最后在arraycollection中

时间:2015-08-25 16:41:35

标签: php symfony doctrine-orm doctrine arraycollection

我想使用symfony的查询构建器并添加数组集合中最后一项的位置

$query = $em->getRepository('RlBookingsBundle:Booking')->createQueryBuilder('b')
        ->select('b, v, c, ca, q')
        ->leftJoin('b.vehicle', 'v')
        ->leftJoin('b.customer', 'c')
        ->leftJoin('c.address', 'ca')
        ->leftJoin('b.quote', 'q')
        ->leftJoin('b.history', 'h') //This is an array collection
        ->orderBy('b.edited', 'DESC')
    ;

我想只使用历史记录中的最新值,因为它是一个日志,但只有最新的条目有效

->where('h.status IN (:status)')
  ->setParameter('status', [7]);

将使用h.status = 7返回所有结果但我希望它只查询最新结果。反正有吗?

我在历史记录字段中尝试了一个groupby,但这似乎与第一个条目中的数据组合在一起,即使我添加了一个orderby。

1 个答案:

答案 0 :(得分:1)

如果你得到的结果已经可以,但你只想要第一个,你可以使用

...
->setMaxResults(1)
...

如果您想按历史记录ID desc订购,您可能希望在现有版本之前添加另一个orderBy子句

...
->orderBy('h.id', 'DESC')
->orderBy('b.edited', 'DESC')
...

如果它比这更复杂,我强烈建议您执行单独的查询以从历史记录中获取所需的记录,然后将其用作过滤器,而不是leftJoin