【发布时间】:2016-06-17 20:27:33
【问题描述】:
问题
我正在构建一个应用程序,其中有很多用户可以标记的内容。让我们以用户可以标记的这些示例为例:
- 另一个用户
- 一张图片
- 评论
- 标签
所以我想要一个标记表来处理标记所有这些事情,但是根据我的愿景并坚持 Laravel 的约定,以便我可以使用关系方法,我必须为 flags 做这样的事情表...
我的“解决方案”
+----+---------+----------+--------+------------+-----------------------------+
| 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!!! |
+----+---------+----------+--------+------------+-----------------------------+
现在这样,这个标记系统根本无法扩展!如果我希望将来能够标记事物,我必须添加一列并对其进行映射等。
我不喜欢这种凌乱的解决方案,而且我想不出另一种 Laravel-y 方式来做到这一点!
我需要想出一种可扩展的方式,以 Laravel 5.2 的方式使用一个表处理多个事物的标志。
【问题讨论】:
-
我会考虑polymorphic relationship。带有
user_id、message、flaggable_id和flaggable_type的flags表。那里的最后一列将指示它属于哪个表。 Eloquent 让这一切变得非常容易使用。 -
您没有想到创建一个名为
entity_types的表,您可以在其中添加行,其中包含诸如user、image、tag、@ 等值的行987654333@ 然后不是有 X 列,而是引用entity.id和另一个包含该值的列?这个设计没有任何 Laravel 风格,Laravel 可以帮助你,而不是为了它而强制执行一些奇怪和困难的事情。
标签: php database laravel laravel-5 laravel-5.2