Я хочу использовать конструктор запросов 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, но я бы хотел, чтобы он запрашивал только самый последний результат. Есть какой-либо способ сделать это?
Я попытался сгруппировать на поле истории, но, похоже, сгруппировалось с данными из первой записи, даже если я добавлю к ней порядок.
Если результаты, которые вы получаете, уже в порядке, но вы хотите только первое, вы можете просто использовать
...
->setMaxResults(1)
...
Если вы хотите заказать по истории ID desc, вы можете добавить еще orderBy
пункт перед существующим
...
->orderBy('h.id', 'DESC')
->orderBy('b.edited', 'DESC')
...
Если это более сложно, я настоятельно рекомендую вам выполнить отдельный запрос, чтобы получить нужные записи из истории, и ТОГДА использовать его в качестве фильтра вместо leftJoin
,
Других решений пока нет …