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

1

Я хочу использовать построитель запросов 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
    У вас есть дата, где вы можете отличить самую последнюю запись?
  • 0
    Да, у строк истории есть даты, или у каждой из них последняя запись будет самой высокой. В идеале я хотел бы оставить Присоединиться, но я не думаю, что доктрина может справиться с этим. или просто оставьте присоединиться к последнему результату из истории объекта.
Теги:
doctrine
doctrine2
arraycollection

1 ответ

1

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

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

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

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

Если он более сложный, я настоятельно рекомендую вам выполнить отдельный запрос, чтобы получить нужную запись (записи) из истории, а THEN использовать ее как фильтр, а не leftJoin.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню