有一种能够被称为“利益”的兴趣'其中包含'类别的ID和/或'品牌'每个用户都有兴趣。
为了防止为user_category_interests
和user_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
答案 0 :(得分:1)
是 - read the docs on polymorphic relations。
它与您拥有的内容类似,但您可能拥有名为interestable_id
和interestable_type
的列(如果您愿意,可以将其配置为其他内容)。 interestable_type
字面上将是引用的类名称的字符串表示形式,如App\Brand
或App\Category
,interestable_id
将是该模型的主键。
最好的部分是因为它通过Eloquent完成了它已经很好地与协会,渴望加载等。
编辑:我应该补充一点,您的3表设置仍然是表示此结构的最佳方式,只是对您使用的列名称以及如何将其与Eloquent挂钩建议。