Php Laravel 5.2中标记系统的数据库关系 问题
我正在构建一个应用程序,其中有许多用户可以标记的东西。让我们以用户可以标记的内容为例:Php Laravel 5.2中标记系统的数据库关系 问题,php,database,laravel,laravel-5,laravel-5.2,Php,Database,Laravel,Laravel 5,Laravel 5.2,我正在构建一个应用程序,其中有许多用户可以标记的东西。让我们以用户可以标记的内容为例: 另一个用户 形象 评论 标签 所以我想要一个标记表来处理标记所有这些事情,但是根据我的愿景,为了坚持Laravel的约定,以便我可以使用关系方法,我必须对标记表做类似的事情 我的“解决方案” 现在这样,这个标记系统根本不可伸缩!如果我想在将来标记事物,我必须添加一列并映射它,等等 我不喜欢这种凌乱的解决方案,我想不出另一种解决方法 我需要找到一种可伸缩的方法,用一个表以Laravel 5.2的方式处理
- 另一个用户
- 形象
- 评论
- 标签
标记表做类似的事情
我的“解决方案”
现在这样,这个标记系统根本不可伸缩!如果我想在将来标记事物,我必须添加一列并映射它,等等
我不喜欢这种凌乱的解决方案,我想不出另一种解决方法
我需要找到一种可伸缩的方法,用一个表以Laravel 5.2的方式处理多个事物的标志。您应该看看多态关系:
您可以为标志创建一个表
,并创建一个名为标志
的表。可标记的列有id
、flag\u id
、Flaggable\u type
和Flaggable\u id
。那么一个条目可能是
1 | 1(标志id)| App\Image(可标记类型)| 45(图像id)
您应该看看多态关系:
您可以为标志创建一个表
,并创建一个名为标志
的表。可标记的列有id
、flag\u id
、Flaggable\u type
和Flaggable\u id
。那么一个条目可能是
代码> 1×1(标志的ID).App\Image(可折叠类型)45(图像ID)< /代码>
我会考虑。用用户标识
、消息
、可标记标识
和可标记标识类型
标记
表格。最后一列将指示它所属的表。Eloquent使这项工作变得非常容易。您没有想到创建一个名为实体类型
的表,在该表中,您可以添加带有值的行,例如用户
,图像
,标记,注释
,然后不使用X列,您是否引用了entity.id
和另一个保存该值的列?关于这个设计没有什么拉拉维里,Laravel是为了帮助你,而不是为了它而执行一些奇怪而困难的事情。我会考虑一个。用用户标识
、消息
、可标记标识
和可标记标识类型
标记
表格。最后一列将指示它所属的表。Eloquent使这项工作变得非常容易。您没有想到创建一个名为实体类型
的表,在该表中,您可以添加带有值的行,例如用户
,图像
,标记,注释
,然后不使用X列,您是否引用了entity.id
和另一个保存该值的列?这个设计没有什么拉威尔-y,拉威尔是来帮助你的,而不是为了它而强制执行一些奇怪和困难的事情。这正是OP需要的。这正是OP需要的。
+----+---------+----------+--------+------------+-----------------------------+
| id | user_id | image_id | tag_id | comment_id | message |
+----+---------+----------+--------+------------+-----------------------------+
| 1 | 3 | null | null | null | I'm building an application |
+----+---------+----------+--------+------------+-----------------------------+
| 2 | null | 45 | null | null | This image is NSFW! |
+----+---------+----------+--------+------------+-----------------------------+
| 3 | null | null | 234 | null | Tag includes bad content... |
+----+---------+----------+--------+------------+-----------------------------+
| 4 | null | null | null | 125 | Spamming!!! |
+----+---------+----------+--------+------------+-----------------------------+