假设我有一个Post实体和一个Comment实体。管理员可以批准或不批准评论(这是数据库中的标志)。邮政实体有:
/**
* @ORM\OneToMany(targetEntity="Comment", mappedBy="post")
*/
protected $comments;
我还想要第二个属性,如下所示:
/**
* @ORM\OneToMany(targetEntity="Comment", mappedBy="post")
*/
protected $approvedComments;
如何在此处仅加载已批准的评论?
答案 0 :(得分:1)
这不能通过您描述的关系来实现。 2个表格不能相关"有条件的"因为关系是基于主键的。
这里至少有解决方案
答案 1 :(得分:1)
您可以使用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`
这个想法似乎更合理。
答案 2 :(得分:0)
您无法在实体中定义该约束。以下是相关文档:
http://doctrine-orm.readthedocs.org/en/latest/reference/annotations-reference.html#annref-onetomany
正如您所看到的,没有与条件相关的选项。您必须使用QueryBuilder定义此条件。