如何做一个左加入或在原则



我在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,但都不起作用。

有什么办法解决我的问题吗?

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

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

这应该很好,我现在只是假设类名。还请考虑所有条件都是在类属性名(DQL)上完成的,而不是在列名上完成的。

您可以通过在实体存储库中创建查询生成器来实现这一点

$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');

相关内容

  • 没有找到相关文章

最新更新