Laravel 引用两个表时的数据库模式
Laravel DB Schema when referencing to two tables
有一个名为 'interests' 的 able,它包含每个用户感兴趣的 'categories' and/or 'brands' 的 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
是 - read the docs on polymorphic relations。
它的工作原理与您所拥有的类似,但您可能有名为 interestable_id
和 interestable_type
的列(如果您愿意,可以将其配置为其他内容)。 interestable_type
将是引用的 class 名称的字符串表示形式,如 App\Brand
或 App\Category
,而 interestable_id
将是该模型的主键。
最好的部分是,因为这一切都是通过 Eloquent 完成的,所以与协会、eager-loading 等
一起完成已经很好了
编辑:我应该补充一点,您的 3 table 设置仍然是表示此结构的最佳方式,只是对您使用的列名以及如何将其与 Eloquent 挂钩提出建议.
有一个名为 'interests' 的 able,它包含每个用户感兴趣的 'categories' and/or 'brands' 的 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
是 - read the docs on polymorphic relations。
它的工作原理与您所拥有的类似,但您可能有名为 interestable_id
和 interestable_type
的列(如果您愿意,可以将其配置为其他内容)。 interestable_type
将是引用的 class 名称的字符串表示形式,如 App\Brand
或 App\Category
,而 interestable_id
将是该模型的主键。
最好的部分是,因为这一切都是通过 Eloquent 完成的,所以与协会、eager-loading 等
一起完成已经很好了编辑:我应该补充一点,您的 3 table 设置仍然是表示此结构的最佳方式,只是对您使用的列名以及如何将其与 Eloquent 挂钩提出建议.