Построитель запросов Symfony Doctrine Где последний в коллекции массивов

Я хочу использовать конструктор запросов 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, но я бы хотел, чтобы он запрашивал только самый последний результат. Есть какой-либо способ сделать это?

Я попытался сгруппировать на поле истории, но, похоже, сгруппировалось с данными из первой записи, даже если я добавлю к ней порядок.

1

Решение

Если результаты, которые вы получаете, уже в порядке, но вы хотите только первое, вы можете просто использовать

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

Если вы хотите заказать по истории ID desc, вы можете добавить еще orderBy пункт перед существующим

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

Если это более сложно, я настоятельно рекомендую вам выполнить отдельный запрос, чтобы получить нужные записи из истории, и ТОГДА использовать его в качестве фильтра вместо leftJoin,

1

Другие решения

Других решений пока нет …