Symfony2 Doctrine - 两个相同实体之间的两种不同关系?

时间:2015-10-30 13:30:40

标签: database symfony doctrine-orm entity

我使用Symfony 2和Doctrine ORM

我想在我的项目中创建一个包含帖子和评论的模块。

我有实体Profile(存储用户)和Comments(显然存储评论)

我需要在同一个实体之间创建两个不同的关系。

首先需要在Comments实体中存储评论作者(关系1对1)。 但其次,每个评论都要添加选项"喜欢"并且"不喜欢"每个用户都可以使用。 我想我需要ProfileComment实体之间的多对多关系,这些关系将存储有关喜欢/不喜欢行为的信息。

我从未创建过2个实体,它们之间有两种不同的关系。你有这方面的经验吗?或者也许我错误地采取了这个问题,应该采取不同的行动。

请提供任何帮助或线索。

1 个答案:

答案 0 :(得分:3)

您可以在关联的学说文档中看到一个非常相似的示例:

http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/working-with-associations.html#association-example-entities

将它放在您的用例中非常容易。 (注意:未经测试的复制和粘贴代码传入!)

Profile中定义:

/**
 * Bidirectional - Many users have Many liked comments (OWNING SIDE)
 *
 * @ManyToMany(targetEntity="Comment", inversedBy="profileLikes")
 * @JoinTable(name="profile_liked_comments")
 */
private $commentsLiked;

/**
 * Bidirectional - Many users have Many liked comments (OWNING SIDE)
 *
 * @ManyToMany(targetEntity="Comment", inversedBy="profileDislikes")
 * @JoinTable(name="profile_disliked_comments")
 */
private $commentsDisliked;

/**
 * Bidirectional - One-To-Many (INVERSE SIDE)
 *
 * @OneToMany(targetEntity="Comment", mappedBy="author")
 */
private $commentsAuthored;

并在Comment中定义:

/**
 * Bidirectional - Many comments are liked by many users (INVERSE SIDE)
 *
 * @ManyToMany(targetEntity="Profile", mappedBy="commentsLiked")
 */
private $profileLikes;

/**
 * Bidirectional - Many comments are disliked by many users (INVERSE SIDE)
 *
 * @ManyToMany(targetEntity="Profile", mappedBy="commentsDisliked")
 */
private $profileDislikes;

/**
 * Bidirectional - Many Comments are authored by one user (OWNING SIDE)
 *
 * @ManyToOne(targetEntity="Profile", inversedBy="commentsAuthored")
 */
 private $author;

请注意,我将ProfileComment的关系从OneToOne更改为OneToMany,因为我假设用户应该能够撰写多条评论。