Я хочу использовать DQL для создания запроса, который выглядит следующим образом в SQL:
select
e.*
from
e
inner join (
select
uuid, max(locale) as locale
from
e
where
locale = 'nl_NL' or
locale = 'nl'
group by
uuid
) as e_ on e.uuid = e_.uuid and e.locale = e_.locale
Я попытался использовать QueryBuilder для создания запроса и подзапроса. Я думаю, что они сами по себе делают правильные вещи, но я не могу объединить их в операторе соединения. Кто-нибудь сейчас, если это возможно с DQL? Я не могу использовать собственный SQL, потому что я хочу вернуть реальные объекты, и я не знаю, для какого объекта выполняется этот запрос (я знаю только базовый класс, у которого есть свойство uuid и locale).
$subQueryBuilder = $this->_em->createQueryBuilder();
$subQueryBuilder
->addSelect('e.uuid, max(e.locale) as locale')
->from($this->_entityName, 'e')
->where($subQueryBuilder->expr()->in('e.locale', $localeCriteria))
->groupBy('e.uuid');
$queryBuilder = $this->_em->createQueryBuilder();
$queryBuilder
->addSelect('e')
->from($this->_entityName, 'e')
->join('('.$subQueryBuilder.') as', 'e_')
->where('e.uuid = e_.uuid')
->andWhere('e.locale = e_.locale');