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