我在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,但没有任何效果。
有什么想法可以解决我的问题吗?
答案 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');