0

有一个称为“兴趣”的能力,它保存每个用户感兴趣的“类别”和/或“品牌”的 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();
    });

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

PS我使用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
4

1 回答 1

1

是的 -阅读有关多态关系的文档

它的工作方式与您所拥有的类似,但您可能有名为interestable_idand的列interestable_type(如果您愿意,可以将其配置为其他内容)。interestable_type字面意思是引用的类名的字符串表示形式,例如or App\BrandApp\Category并且interestable_id将是该模型的主键。

最好的部分是因为这一切都是通过 Eloquent 完成的,所以与关联、急切加载等一起使用已经很好了。

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

于 2017-02-12T00:41:20.103 回答