在Doctrine2中右表上组合LEFT OUTER JOIN和WHERE子句

时间:2012-04-30 10:57:54

标签: mysql symfony doctrine-orm createquery

我有以下查询。

$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'没有任何项目。我已经能够检索有项目的员工。

现在我如何使用doctrine2 , createQuery检索拥有项目x的员工和没有任何项目的员工?

1 个答案:

答案 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()
相关问题