2012-04-30 114 views
0

子句右表我有以下查詢。結合LEFT OUTER JOIN和WHERE在Doctrine2

$objEmployee = $this->getEntityManager() 
         ->createQuery(
           "SELECT e FROM MyProjectEntityBundle:Employee e LEFT OUTER JOIN e.project p where p.name like % abc %" 
         )->getResult(); 

顯示項目名稱'abc'。我怎樣才能顯示那些誰滿足當條件變爲假誰不有一個項目的條件以及其他員工一個項目的所有員工的詳細信息?

例如。

Employee    Project 
    a      x 
    b      x 
    c      y 
    d      - 

員工'a'和'b'有項目'x'。員工'c'有項目'y'd沒有任何項目。我已經能夠找回有項目的員工。

現在,我怎麼找回誰擁有項目x和誰沒有使用任何doctrine2 , createQuery項目員工的員工?

+0

你能後的表定義爲兩個表? –

回答

0

試想一下,如果你沒有一個WHERE子句的結果會怎樣看:你離開的員工和項目之間的連接會導致您的所有員工記錄到左邊的結果,以及配套工程的對。任何沒有任何項目的員工仍然會出現在左側,但項目記錄將爲空。

那麼試試這個你DQL:

$dql = "SELECT e FROM MyProjectEntityBundle:Employee e LEFT JOIN e.project p WHERE p.id IN :p_ids OR p.id IS NULL" 
$query = $this->getEntityManager()->createQuery($dql); 
$query->setParameter("p_id", "(" . implode(",", $p_ids) . ")"); 
$employees = $query->getResult()