簡體   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