Symfony Doctrine查询生成器数组集合中的最后一个位置



我想使用symfony的查询生成器,并在数组集合的最后一项中添加一个where

$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。

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

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

如果您想按历史ID desc订购,您可能需要在现有的之前添加另一个orderBy子句

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

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

相关内容

  • 没有找到相关文章

最新更新