Symfony2实体最佳实践



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

我有:一个实体ItemUser和一个实体 favorite (favorite由一个User和一个Item组成,我对这两个字段有一个唯一的约束)

我想按页面列出40个项目,并显示每个项目,如果它是在当前用户的最爱或不。最好的方法是什么?我已经想过一些解决办法了。

解决方案1 向我的Item实体添加一个名为favorite的整数属性。获取当前页面的所有Item的id (IDS),并使用操作符IN (IDS)获取所有favorite。在favorite上设置循环,我将Item属性设置为1表示"宠儿",并将另一个设置为null表示"不宠儿"。缺点是,我不能仅通过使用整数属性来使用favorite的信息。

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

我不知道这样做的最佳实践是什么,我不必为每个项目查询,它太重了…如果你有一个更好的解决方案,评论我的不同的解决方案,或一个样本包,我将不胜感激:)

不需要额外的包,我甚至怀疑是否存在一个。这是一个非常简单的任务,在大多数社交网络中很容易解决,有人可以发布(在你的情况下是"item"),用户可以喜欢一个帖子(在你的情况下是"favorite")。

最简单的常用方法是创建一个收藏夹实体(表),其中有两个重要的列,每个列都有多对一映射。一个到users表,一个到items表,每个表都有一对多的映射。也就是说,许多用户可以喜欢一个项目,许多项目可以被一个用户喜欢或"收藏"。这个新实体包含所有这些数据,不用担心查询速度,根据我的经验,doctrine会自动为相关表上的映射列创建索引。

最新更新