Laravel 5.2中标记系统的数据库关系

问题描述 投票:0回答:1

Problem

我正在构建一个应用程序,用户可以标记许多内容。让我们举一些用户可以标记的示例:

  • 另一个用户
  • 一个图像
  • 如何 -
  • 一天

所以我想要一个标记表来处理标记所有这些事情,但是凭借我的愿景并坚持Laravel的约定,所以我可以利用关系方法,我必须为flags表做这样的事情......


My "solution"

+----+---------+----------+--------+------------+-----------------------------+
| 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方式的多个事物。

php database laravel laravel-5 laravel-5.2
1个回答
2
投票

你应该看一下多态关系:https://laravel.com/docs/master/eloquent-relationships#many-to-many-polymorphic-relations

您为flags创建了一个表,并创建了一个名为flaggable的表。 Flaggable有列idflag_idflaggable_typeflaggable_id。然后一个条目可能是

1 | 1 (id of the flag) | App\Image (type of flaggable) | 45 (ID of image)

© www.soinside.com 2019 - 2024. All rights reserved.