Symfony2实体的最佳实践

时间:2015-08-03 18:10:00

标签: entity-framework symfony doctrine-orm doctrine entity

我想知道这样做的最佳做法是什么:

我有: 实体, 实体用户, 和实体收藏夹(收藏夹由一个用户和一个项目组成,我对这两个字段有唯一约束)

我希望逐页列出40个项目,并显示每个项目是否在当前用户的喜好中。最好的方法是什么?我已经考虑了一些解决方案。

解决方案1 ​​ 将名为favorite的整数属性添加到我的Item实体。获取当前页面的所有项目ID(IDS),并通过运算符IN(IDS)获取所有收藏夹。在收藏夹上有一个循环,我会将Item属性设置为1,对于" favored",我会让另一个为null,因为"不喜欢"。缺点是,我只能使用整数属性来使用收藏夹的信息。

解决方案2 将名为favorites的数组集合属性添加到我的Item实体,该实体将与OneToMany关联,与Favorite实体关联。因此,当我列出项目时,我可以使用项目和收藏夹之间的createQueryBuilder方法重写关节(左连接),以通过指定当前用户收藏夹来仅获取一个或任何收藏项目。缺点,我重写了当前最喜欢的项目列表,所以我不会得到所有的收藏,但只有当前用户的最爱。

我不知道这样做的最佳做法是什么,我不必对每个项目进行查询,它太重了......如果你有一个更好的解决方案,关于我的不同解决方案的评论,或带有样本的捆绑,我将不胜感激:))

1 个答案:

答案 0 :(得分:2)

不需要额外的捆绑,我怀疑是否存在一个。这是一个非常简单的任务,在大多数社交网络中都可以很容易地解决,在这些网络中,有人可以发帖(在你的情况下是“项目”)用户可以喜欢帖子(在你的情况下'喜欢')。

通过创建一个收藏夹实体(表格)来实现此目的的简单方法,该实体具有两个重要的列,每个列都具有多对一映射。一个到users表,一个到items表,每个表分别有一对多的映射。即许多用户可以喜欢一个项目,许多项目可以被一个用户青睐或“收藏”。这个新实体包含所有这些数据,不用担心查询速度,在我的经验中,doctrine自动为相关表上的映射列创建索引。