Проблема с сортировкой Doctrine DQL по полю связанной сущности ⇐ Php
Проблема с сортировкой Doctrine DQL по полю связанной сущности
Я столкнулся с проблемой сортировки в DQL Doctrine (язык запросов Doctrine), включающей связанные сущности, и мне хотелось бы получить некоторые рекомендации.
У меня есть две сущности: «Предложение» и «OfferTrackingPublisher» с отношением «один ко многим». «OfferTrackingPublisher» регистрирует изменения, связанные с объектами «Предложение», и имеет такие поля, как «createdAt» и «status».
Моя цель — отсортировать объекты «Предложение» на основе поля «createAt» связанных записей «OfferTrackingPublisher», но только тогда, когда «статус» — «добавить» или «переопубликовать». В SQL я успешно добился этого с помощью подзапроса:
ORDER BY ( ВЫБЕРИТЕ МАКС(otp.created_at) ОТ Offer_tracking_publisher ОТП ГДЕ otp.offer_id = o0_.id И otp.status IN («добавить», «переопубликовать») ) ДЕСК Однако, когда я пытаюсь перевести это в DQL Doctrine, я сталкиваюсь с проблемами. Вот код DQL, который я попробовал:
$subquery = $this->_em->createQueryBuilder() ->select('MAX(otp.createdAt)') ->from('App\Entity\OfferTrackingPublisher', 'otp') ->where('otp.offer = o.id') ->andWhere("otp.status IN('добавить', 'переопубликовать')"); $qb->addOrderBy( '(' . $subquery->getDQL() . ')', 'DESC' ); Ошибка:
[Синтаксическая ошибка] строка 0, столбец 412: Ошибка: ожидаемый Doctrine\ORM\Query\Lexer::T_IDENTIFIER, получен '(' К сожалению, этот код DQL выдает ошибку, и я не знаю, как ее устранить. Я пробовал разные подходы, но ни один из них не работает. Любая помощь или предложения о том, как правильно этого добиться, пожалуйста?
Я столкнулся с проблемой сортировки в DQL Doctrine (язык запросов Doctrine), включающей связанные сущности, и мне хотелось бы получить некоторые рекомендации.
У меня есть две сущности: «Предложение» и «OfferTrackingPublisher» с отношением «один ко многим». «OfferTrackingPublisher» регистрирует изменения, связанные с объектами «Предложение», и имеет такие поля, как «createdAt» и «status».
Моя цель — отсортировать объекты «Предложение» на основе поля «createAt» связанных записей «OfferTrackingPublisher», но только тогда, когда «статус» — «добавить» или «переопубликовать». В SQL я успешно добился этого с помощью подзапроса:
ORDER BY ( ВЫБЕРИТЕ МАКС(otp.created_at) ОТ Offer_tracking_publisher ОТП ГДЕ otp.offer_id = o0_.id И otp.status IN («добавить», «переопубликовать») ) ДЕСК Однако, когда я пытаюсь перевести это в DQL Doctrine, я сталкиваюсь с проблемами. Вот код DQL, который я попробовал:
$subquery = $this->_em->createQueryBuilder() ->select('MAX(otp.createdAt)') ->from('App\Entity\OfferTrackingPublisher', 'otp') ->where('otp.offer = o.id') ->andWhere("otp.status IN('добавить', 'переопубликовать')"); $qb->addOrderBy( '(' . $subquery->getDQL() . ')', 'DESC' ); Ошибка:
[Синтаксическая ошибка] строка 0, столбец 412: Ошибка: ожидаемый Doctrine\ORM\Query\Lexer::T_IDENTIFIER, получен '(' К сожалению, этот код DQL выдает ошибку, и я не знаю, как ее устранить. Я пробовал разные подходы, но ни один из них не работает. Любая помощь или предложения о том, как правильно этого добиться, пожалуйста?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Пагинатор с «$fetchJoinCollection = true» не будет соблюдать «ORDER BY» в доктрине DQL?
Anonymous » » в форуме Php - 0 Ответы
- 26 Просмотры
-
Последнее сообщение Anonymous
-