我使用Symfony 2和Doctrine ORM
我想在我的项目中创建一个包含帖子和评论的模块。
我有实体Profile
(存储用户)和Comments
(显然存储评论)
我需要在同一个实体之间创建两个不同的关系。
首先需要在Comments
实体中存储评论作者(关系1对1)。
但其次,每个评论都要添加选项"喜欢"并且"不喜欢"每个用户都可以使用。
我想我需要Profile
和Comment
实体之间的多对多关系,这些关系将存储有关喜欢/不喜欢行为的信息。
我从未创建过2个实体,它们之间有两种不同的关系。你有这方面的经验吗?或者也许我错误地采取了这个问题,应该采取不同的行动。
请提供任何帮助或线索。
答案 0 :(得分:3)
您可以在关联的学说文档中看到一个非常相似的示例:
将它放在您的用例中非常容易。 (注意:未经测试的复制和粘贴代码传入!)
在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;
请注意,我将Profile
与Comment
的关系从OneToOne更改为OneToMany,因为我假设用户应该能够撰写多条评论。