php - Symfony2 中的条件关系

标签 php symfony doctrine entity-relationship

假设我有一个 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/

相关文章:

php - Doctrine : OneToOne entity relationship doesn't work

javascript - 某些字段 id 的 Ajax POST 数据

用于简单插入 MySQL 的 PHP PDO 安全程序

javascript - JSON 中位置 0 处出现意外标记 <(js 和 php)

php - 使用 Node.js 在 PHP 应用程序中显示消息的实时通知

php - Doctrine : how to use Replace function

php - Doctrine 2 : calling flush multiple times

mysql - 使用 Doctrine 统计关联实体时如何避免大量查询?

regex - 如何使用正则表达式检查 ramsey/uuid 要求?

php - 我们如何将自托管的 git 存储库与 Composer 一起使用?