0

我有以下查询。

$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

4

1 回答 1

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()
于 2012-04-30T15:21:33.593 回答