我有一個問題表及答案(結果)表該symfony的應用程序不同:主義的左連接的行爲與相關聯的每個問題,普通的SQL
問題表:
id | question_title
-------------------
1 | Name?
2 | Age?
結果表:
id | answer_text | question_id | user_id
----------------------------------------
1 | John | 1 | 10
2 | Peter | 1 | 11
3 | 24 | 2 | 10
用戶可能跳過問題,因此它可能不是答案表中給定問題的匹配答案。但是,當我檢索給定用戶的結果時,我想要全面列出每個問題和相關答案,或者爲空,以防萬一它不存在。因此,(在普通的SQL)我離開加入這樣的:
SELECT question_text, answer_text FROM `question` left join result on question.id = result.question_id and user_id=10
獲取我:
question_text | answer_text
----------------------------------------
Name? | John
Age? | 24
對於USER_ID 11,這看起來像:
question_text | answer_text
----------------------------------------
Name? | Peter
Age? | null
正是我所期望的。
當我嘗試將此查詢轉換爲dql查詢時出現問題。我這樣做是這樣的:
$qb->select('q.question_title, r.answer_text');
$qb->from('AppBundle:Question', 'q');
$qb->leftJoin(
'AppBundle:Result',
'r',
\Doctrine\ORM\Query\Expr\Join::WITH,
'q.id = r.question'
);
$qb->where('r.user = '.$user->getId());
$answer= $qb->getQuery()->getResult();
對於在連接的右側具有匹配數據的數據集,它工作正常。但是,當右側爲空時,它會從返回的數組中除去,但getResult。這將高於純SQL的第一個例子轉儲:
array:2 [
0 => array:2 [
"question_title" => Name?
"answer_text" => "John"
]
1 => array:2 [
"question_title" => Age?
"answer_text" => "24"
]
]
這是第二個例子轉儲。沒有匹配的答案,我得到的只是1個元素的數組:
array:2 [
0 => array:2 [
"question_title" => Name?
"answer_text" => "Peter"
]
]
我不知道是否有任何的方式來模仿實際的行爲我與左連接在普通的SQL。
順便說一下,數據庫引擎即時通訊使用的是MySQL,以防萬一。
編輯:實際上不是什麼在Doctrine2 LEFT JOIN with 2 conditions被問。以爲我有相同的查詢在DQL和SQL中表現不同。原來,我只是把它翻譯過來。
的可能的複製[Doctrine2 LEFT加入2個條件](https://stackoverflow.com/questions/15815869/doctrine2-left-join-with-2-conditions)這顯然是基本的,你發現了什麼谷歌搜索,說'教條左連接多個' ? – philipxy
那真的不是我所問的。我以爲我在SQL中的查詢在DQL中的表現有所不同,但我實際上是在翻譯它錯誤,正如下面的用戶所指出的那樣。 –
在這個問題中,*問*是什麼(儘管它的(不好))標題)是爲什麼結果以某種方式出現錯誤,給出了一些'join's&a'where'。因此,對問題的合理描述包括您的情況。在這個問題中*回答的是,提問者在他們需要「開」時錯誤地將條件放在「哪裏」。這是你的問題的答案。這也是其他許多點擊,也從變體點擊。我*發現*由我給的谷歌回答。所以... – philipxy