2015-11-26 54 views
-1

我有3個表:考試,現場和數據。教條加入條件

的關係是:

考試多對多場;字段oneToMany數據;考試一對多數據

我需要指定我做了FIELD_ID和exam_id獲得所需要的數據 在SQL:

SELECT * FROM exam 
LEFT JOIN field ON exam.id = field.exam_id 
LEFT JOIN data ON field.id = data.field_id AND (data.exam = exam.id) 

這一工程

教義:

$this->_em->getRepository('FwFollowBundle:Exam') 
     ->createQueryBuilder('exam') 
->leftJoin('exam.field', 'field') 
->leftJoin('field.data', 'data', 'WITH', 'data.exam = exam') 
->select ('exam', 'field', 'data') 

結果不會被'WITH'條件過濾。

我想與他們的田地返回所有的考試,如果他們有,他們的數據

我一個人知道爲什麼。 THX

編輯1: 我做了一些垃圾,試圖發現問題。 在我的項目中,我在考試和現場之間邁出了一步。 我這樣做

$this->_em->getRepository('FwFollowBundle:Exam') 
->createQueryBuilder('exam') 
->leftJoin('exam.score', 'score') 
->leftJoin('score.fields', 'field') 
->leftJoin('field.data', 'data', 'WITH', 'data.exam = exam') 
->select ('exam', 'score', 'field', 'data') 

對於2個考試我也有同樣的分數,所以相同的字段。我只與數據有區別。 這是2場考試的Field實體的相同實例。這就是我沒有想要的數據的原因。

回答

2

嘗試這樣的:

return $this->_em->getRepository('FwFollowBundle:Exam') 
    ->createQueryBuilder('exam') 
    ->leftJoin('exam.field', 'field') 
    ->leftJoin('field.data', 'data') 
    ->where('data.exam = :exam') 
    ->setParameter('exam', 'exam.id') 
    ->getQuery() 
    ->getResult() 
; 
+0

THX,但與查詢我有回報 – lala

+0

沒有我的回答是短sorry.With查詢,只能用數據分別爲考試回報。我需要返回所有考試,其領域,如果存在的話,數據 – lala

0

您需要選擇您想進行水合的實體,否則當你調用$應試> getfield命令() - >的getData()主義,沒有將延遲加載的一切標準。

我重新寫你的查詢是這樣的:

$exam = $this->_em->createQueryBuilder() 
->select('exam', 'field', 'data') 
->from('FwFollowBundle:Exam', 'exam') 
->leftJoin('exam.field', 'field') 
->leftJoin('field.data', 'data', 'WITH', 'data.exam = exam') 
->getQuery() 
->getResult(); 
+0

我的查詢不完整,我有選擇條件水合關係。 – lala