我想使用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。
答案 0 :(得分:1)
如果你得到的结果已经可以,但你只想要第一个,你可以使用
...
->setMaxResults(1)
...
如果您想按历史记录ID desc订购,您可能希望在现有版本之前添加另一个orderBy
子句
...
->orderBy('h.id', 'DESC')
->orderBy('b.edited', 'DESC')
...
如果它比这更复杂,我强烈建议您执行单独的查询以从历史记录中获取所需的记录,然后将其用作过滤器,而不是leftJoin
。