[英]Conditional Relationship in Symfony2
假設我有一個Post實體和一個Comment實體。 管理員可以批准或不批准評論(這是數據庫中的標志)。 郵政實體有:
/**
* @ORM\OneToMany(targetEntity="Comment", mappedBy="post")
*/
protected $comments;
而且我還想要第二個屬性,它看起來像:
/**
* @ORM\OneToMany(targetEntity="Comment", mappedBy="post")
*/
protected $approvedComments;
如何在此處僅加載已批准的評論?
這不能通過您描述的關系來實現。 由於關系基於主鍵,因此2個表不能“有條件地”相關。
你至少有解決方案
您可以使用Inheritance mapping
: http : //doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html
這個想法將為每種類型(已批准和未批准)提供單獨的類,但將所有內容存儲在單個表中( SINGLE_TABLE
繼承)。
您需要有額外的列來存儲類類型鑒別器。
然后,你會有:
/**
* @ORM\OneToMany(targetEntity="ApprovedComment", mappedBy="post")
*/
protected $approvedComments;
/**
* @ORM\OneToMany(targetEntity="NonApprovedComment", mappedBy="post")
*/
protected $nonApprovedComments;
明顯的缺點是創建額外的類。
你可以調整一下Query
/ QueryBuilder
如:
`SELECT p, c FROM AcmeDemoBundle:Post p LEFT JOIN p.comments c WITH c.approved = FALSE`
這個想法似乎更合理。
您無法在實體中定義該約束。 以下是相關文檔:
http://doctrine-orm.readthedocs.org/en/latest/reference/annotations-reference.html#annref-onetomany
如您所見,沒有與條件相關的選項。 您必須使用QueryBuilder定義此條件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.