[英]Doctrine and left join with condition
当我使用条件时,我的关系有问题。 我的帖子实体:
/**
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="posts")
* @ORM\JoinColumn(nullable=false)
*/
private $user;
/**
* @ORM\Column(type="smallint", nullable=true)
*/
private $type;
和用户实体
/**
* @ORM\OneToMany(targetEntity=Post::class, mappedBy="user")
*/
private $posts;
存储库使用此条件时存在问题:
return $this->createQueryBuilder('p')
->addSelect('p', 'u', 'up')
->leftJoin('p.user', 'u')
->leftJoin('u.posts', 'up', 'WITH', 'p.type = up.type')
->getQuery()
->getResult()
;
在数据库image.png中有这样的数据
我得到这些结果。 在第一个帖子中,对于用户来说,帖子应该是相同的类型。 (应该没有 id 为 3 和 5 的帖子)。 如果我使用getArrayResult()
而不是getQuery()
,一切正常,但我需要实体。 所以这可能是由于优化。 有谁知道如何处理它?
另外添加了github 源
我认为您需要使用Criteria 过滤您的集合(并在映射数据而不是在存储库中调用方法时在 ORM 执行的连接上添加必要的过滤器)。
您可以在此处找到 Symfony 中的 Criteria 使用示例(即使视频不可用,您也有代码和解释)。
最后,将WITH
条件从连接(从 SQL 的角度正确)移动到标准(对 ORM 有用)应该可以解决您遇到的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.