如何解决主义和左联有条件
使用条件时,我的关系存在问题。我的帖子实体:
/**
* @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中具有此类数据
我得到了这些results。在第一篇文章中,对于用户而言,这些文章应为同一类型。 (应该没有ID为3和5的帖子)。如果我使用getArrayResult()
而不是getQuery()
,则一切正常,但我需要实体。因此,可能是由于优化。有人知道如何处理吗?
另外添加github source
解决方法
我认为您需要使用Criteria to filter your collection(并且在映射数据时(而不是在调用存储库中的方法时)在ORM执行的联接上添加必要的过滤器)。
您可以在Symfony here中找到有关“准则”用法的动手示例(即使该视频不可用,您也具有代码和说明)。
最后,将WITH
条件从联接(从SQL角度来看是正确的)移动到条件(对ORM有用)应该可以解决您遇到的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。