2012-04-30 83 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()