繁体   English   中英

Doctrine 和左连接条件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM