如何在教条中或在教条中进行LEFT JOIN

时间:2016-04-13 08:23:51

标签: php mysql symfony doctrine-orm query-builder

我在Symfony2中使用Doctrine的querybuilder来创建查询以获取实体。

我试图在MySQL中获得此结果:

SELECT u0_.id AS id0
FROM user u0_ 
LEFT JOIN rva_victims r3_ ON u0_.id = r3_.user_id 
INNER JOIN rva r1_ ON r1_.id = r3_.rva_id or u0_.id = r1_.declarant_id

我在$ qb-> join()中尝试了ON和WITH conditionType,但没有任何效果。

有什么想法可以解决我的问题吗?

2 个答案:

答案 0 :(得分:1)

解决方案应该非常简单。在您的情况下,它应该看起来像这样,假设您在存储库类中:

$this
  ->createQueryBuilder('u')
  ->leftJoin(Victims::class, 'v', Query\Expr\Join::WITH, 'v.user = u.id')
  ->join(Rva::class, 'r', Query\Expr\Join::WITH, 'r.id = v.rva OR u.id = r.declarant');

这应该可以正常工作,我现在只是假设类名。另请注意,所有条件都是在类属性名称(DQL)上完成的,而不是列名。

答案 1 :(得分:0)

您可以通过在实体存储库中创建查询构建器来完成此操作

$qb = $this->createQueryBuilder('u')
     ->leftJoin('yourbundle:Entityname', 'ye', 'WITH', 'u0_.id = r3_.user_id')
     ->innerJoin('yourbuncle:entityname', 'yen', 'WITH', 'r1_.id = r3_.rva_id', 'OR', 'u0_.id = r1_.declarant_id');