Symfony2 实体最佳实践

Symfony2 entities best practice

我想知道执行此操作的最佳做​​法是什么:

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

我想按页列出 40 个项目,并显示每个项目是否在当前用户的收藏夹中。最好的方法是什么?我已经想好了一些解决办法。

解决方案 1 添加一个名为 favorite 的整数 属性 到我的 Item 实体。获取当前页面所有Item的id(IDS),通过操作符IN(IDS)获取所有收藏。在 Favorite 循环中,我将 "favoured" 的项目 属性 设置为 1,而 "unfavoured" 的另一个设置为 null。缺点,我无法通过仅使用整数 属性.

来使用 Favourite 的信息

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

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

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

通过创建一个收藏夹实体 (table) 来实现此目的的简单常用方法,该收藏夹实体具有两个重要的列,每个列都有一个 many-to-one 映射。一个给用户table,一个给项目table,每个都分别有一个one-to-many 映射。即许多用户可以收藏一个项目,许多项目可以被一个用户收藏或"favorited"。这个新实体包含所有这些数据,不用担心查询速度,根据我的经验,自动为相关 table 上的映射列创建索引。