Laravel 引用两个表时的数据库模式

Laravel DB Schema when referencing to two tables

有一个名为 'interests' 的 able,它包含每个用户感兴趣的 'categories' and/or 'brands' 的 id。 为了防止为 user_category_interestsuser_brand_interest 创建两个单独的表,我添加了一个名为 type.

的枚举列

现在我不知道应该如何在 Schema Builder 中创建迁移,如何设置关系和外键,...以利用 Eloquent 方法。

    Schema::create('user_interests', function (Blueprint $table) {
        $table->increments('id');
        $table->enum('type', ['categories', 'brands']);
        $table->integer('reference_id')->unsigned();
        $table->timestamps();
    });

有没有更好的方法来代替创建两个单独的表和模型?

P.S。我用 laravel 5.4

Brands Table:
id  |  name
-----------
1   | Adidas
2   | Nike
3   | Puma

Categories Table:
id  |  name
-----------
1   | Clothes
2   | Luxury
3   | Sport Wear


User_Interests Table:
id  | user_id |   type   | reference_id
-----------------------------------------
1   | 113     | 'brand'  | 2
1   | 113     | 'brand'  | 3
2   | 113     |'category'| 3
3   | 224     | 'brand'  | 1

是 - read the docs on polymorphic relations

它的工作原理与您所拥有的类似,但您可能有名为 interestable_idinterestable_type 的列(如果您愿意,可以将其配置为其他内容)。 interestable_type 将是引用的 class 名称的字符串表示形式,如 App\BrandApp\Category,而 interestable_id 将是该模型的主键。

最好的部分是,因为这一切都是通过 Eloquent 完成的,所以与协会、eager-loading 等

一起完成已经很好了

编辑:我应该补充一点,您的 3 table 设置仍然是表示此结构的最佳方式,只是对您使用的列名以及如何将其与 Eloquent 挂钩提出建议.