0

次のクエリがあります。

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

「abc」のようなプロジェクト名を表示します。条件が false になったときに、条件を満たすプロジェクトを持っている従業員と、プロジェクトを持っていない他の従業員のすべての従業員の詳細を表示するにはどうすればよいですか?

例えば。

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 に答える