目前這個函數的工作原理:它顯示一個特定的遊戲,有多少個作業。SQL/Doctrine:左連接問題
問題:如果沒有工作,遊戲不會出現在列表中。
即使沒有附加作業,如何顯示遊戲?
感謝
public function getWithGames()
{
$q = $this->createQuery('c')
->leftJoin('c.stJob j')
->where('j.expires_at > ?', date('Y-m-d h:i:s', time()))
->addOrderBy('c.name');
$q->andWhere('j.is_activated = ?', 1);
$q->andWhere('j.is_public = ?', 1);
return $q->execute();
}
我認爲這真的不重要,因爲它的左加入。所以無論條件適用於何處。但看看他定義的問題。如果沒有工作,則不列出。所以他想要一個連接的值(工作屬性公開和激活的是1)或(兩者都是NULL)......(如果沒有工作就會發生這種情況)。最後的部分是他忘了 – 2010-10-15 16:00:18
它非常重要。做'OR ...東西是NULL'根本不可取。 「ON」條款的目的在於這些是用於建立連接***的條件。如果沒有行符合這些條件,則不存在連接 - 並且在LEFT JOIN的情況下沒有問題。試圖用手動編寫的「東西是NULL」模擬一個「ON」子句是醜陋的。我希望這不是在這裏倒下的原因。 – VoteyDisciple 2010-10-15 16:02:21
這是完全正確的。給你一個贊成這個:)我不喜歡的是它不是他的代碼中的問題。他的代碼中的問題是一個純粹的語義問題,無法理解左連接實際上做了什麼。 – 2010-10-15 16:07:27