引用两个表

时间:2017-02-11 23:35:56

标签: laravel eloquent laravel-schema-builder

有一种能够被称为“利益”的兴趣'其中包含'类别的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

1 个答案:

答案 0 :(得分:1)

是 - read the docs on polymorphic relations

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

最好的部分是因为它通过Eloquent完成了它已经很好地与协会,渴望加载等。

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