2017-02-16 16 views
-1

我的QueryBuilder這樣學說得到詳細的單排最新每個主

$query = $this->getEntityManager() 
    ->createQueryBuilder() 
    ->select('partial master.{id,name}, partial detail.{id,name}') 
    ->from('AppBundle:Master', 'master') 
    ->leftJoin('master.detail', 'detail') 
    ->orderBy('detail.id','DESC') 
    ->getQuery(); 
return $query->getArrayResult(); 

主的關係是一對多,細節關係是多對一。 我試圖獲得一行詳細信息與詳細id更高或更低。什麼Querybuilder使這成爲可能? 例如,我有數據是這樣的:

1.A, 1.B, 1.C, 2.A, 3.A, 3.C 

我想結果是這樣下面

1.A, 2.A, 3.A 
+1

你試過'getSingleResult()'? –

+0

不喜歡這樣。在這裏我已經編輯了我的問題並舉例說明。 @MertÖksüz –

+0

[Doctrine查詢語言獲取最大/最新的行每組]的可能重複(https://stackoverflow.com/questions/46106582/doctrine-query-language-get-max-latest-row-per-group) –

回答

1
$query = $this->getEntityManager() 
    ->createQueryBuilder() 
    ->select('master.id, master.name, detail.id, detail.name') 
    ->from('AppBundle:Master', 'master') 
    ->leftJoin('master.detail', 'detail') 
    ->groupBy('master.id') 
    ->orderBy('detail.id','DESC') 
    ->getQuery() 
; 

return $query->getArrayResult(); 
+0

我不能使用groupBy,如果詳細名稱有2個不同的值,我仍然得到2個細節。 @rendyEkoPrastiyo –

+0

你的問題告訴'我試圖得到一行細節.',現在你想'如果細節名稱有2個不同的值,我仍然得到2細節。「,你是什麼意思? –

+0

如果我使用groupBy與詳細名稱有2個不同的值,我仍然得到2個細節。 我只想得到具有指定的詳細id的單行。 具有更高詳細ID或更低詳細ID的示例。 @ rendy @ EkoPrastiyo –

0

要獲得每個主行的最新細節你CA使用以下DQL

SELECT m,a 
FROM AppBundle\Entity\Master m 
    LEFT JOIN m.detail a 
    LEFT JOIN AppBundle\Entity\Detail b 
    WITH a.master = b.master 
    AND a.id < b.id 
WHERE b.id IS NULL