我想用DQL創建一個查詢,看起來像這樣在SQL:子查詢中加入教義DQL
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');
在子查詢上做一個INNER JOIN正是[我正在嘗試做的事情](http://stackoverflow.com/questions/27007090/inner-join-results-from-select-statement-using-doctrine -querybuilder)。你找到解決方案嗎? –