Я хочу использовать построитель запросов 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 к ней.
Если результаты, полученные вами, уже одобрены, но вы хотите только первый, вы можете просто использовать
...
->setMaxResults(1)
...
Если вы хотите заказать идентификатор истории по убыванию, вы можете добавить еще orderBy
предложение orderBy
перед существующим
...
->orderBy('h.id', 'DESC')
->orderBy('b.edited', 'DESC')
...
Если он более сложный, я настоятельно рекомендую вам выполнить отдельный запрос, чтобы получить нужную запись (записи) из истории, а THEN использовать ее как фильтр, а не leftJoin
.