我正在尝试使用2个实体 - User和Post来建模一个简单的评论系统。 User类具有常规属性,Post类如下所示:
class Post
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* User who posted activity
*
* @var User
* @ORM\ManyToOne(targetEntity="Acme\AppBundle\Entity\User")
*/
protected $user;
/**
* @var string $text
*
* @ORM\Column(name="text", type="string", length=255)
*/
private $text;
/**
* @var datetime $timestamp
*
* @ORM\Column(name="timestamp", type="datetime")
*/
private $timestamp;
}
我需要进行简单的关联 - 用户可以收藏帖子。合乎逻辑的做法是将User类中的ManyToMany关联添加到Post,就像这样
@ORM\ManyToMany(targetEntity="Post")
然后,将创建一个以user_id和post_id为主键的映射表。现在我的问题是我需要添加一个时间戳属性来跟踪用户喜欢帖子的时间。一种可能性是创建一个新的实体“FavouritePost”,使用ManyToOne关联将其映射到User和Post类,并为其添加时间戳属性。
1)这是在Symfony2中执行此操作的正确/唯一方法吗? 2)如果我想选择最近的15个帖子,并检查当前登录的用户是否喜欢这些帖子,我该如何编写查询?
任何帮助表示赞赏,因为我在如何通过Symfony
做了一个空白答案 0 :(得分:0)
1)是的,您可以创建一个联合表,以及它的FavouritePost实体。
2)您应该使用Repository来创建所有特殊查询:
@ORM \实体(repositoryClass = “Acme公司\的appbundle \库\ FavouritePostRepository”)
然后这很简单的Doctrine查询,就像你会做得更多。