假设我有一个 Post 实体和一个 Comment 实体。管理员可以批准或不批准评论(这是数据库中的标志)。帖子实体有:
/**
* @ORM\OneToMany(targetEntity="Comment", mappedBy="post")
*/
protected $comments;
我还想要第二个属性,它看起来像:
/**
* @ORM\OneToMany(targetEntity="Comment", mappedBy="post")
*/
protected $approvedComments;
如何才能只在此处加载已批准的评论?
最佳答案
想法 #1
您可以使用继承映射
:https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html
想法是为每种类型(已批准和未批准)创建单独的类,但将所有内容存储在一个表中(SINGLE_TABLE
继承)。
您将需要有额外的列来存储类类型鉴别器。
那么,你会:
/**
* @ORM\OneToMany(targetEntity="ApprovedComment", mappedBy="post")
*/
protected $approvedComments;
/**
* @ORM\OneToMany(targetEntity="NonApprovedComment", mappedBy="post")
*/
protected $nonApprovedComments;
明显的缺点是创建额外的类。
想法#2
你可以像这样调整你的Query
/QueryBuilder
:
`SELECT p, c FROM AcmeDemoBundle:Post p LEFT JOIN p.comments c WITH c.approved = FALSE`
这个想法似乎比较合理。
关于php - Symfony2 中的条件关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27251447/