繁体   English   中英

在Doctrine2的右表上合并LEFT OUTER JOIN和WHERE子句

[英]Combining LEFT OUTER JOIN and WHERE clause on right table in 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没有任何项目。 我已经能够检索到拥有项目的员工。

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

只需考虑一下如果没有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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM