我在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');