【问题标题】:Laravel DB Schema when referencing to two tables引用两个表时的 Laravel DB Schema
【发布时间】:2017-02-12 08:41:20
【问题描述】:

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

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

附:我使用 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

【问题讨论】:

标签: laravel eloquent laravel-schema-builder


【解决方案1】:

是的 - read the docs on polymorphic relations

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

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

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

【讨论】:

  • 该死!昨晚我唯一没有读过的部分是多态关系!
猜你喜欢
  • 1970-01-01
  • 2011-11-06
  • 2016-04-17
  • 1970-01-01
  • 2017-06-08
  • 1970-01-01
  • 2021-12-31
  • 2016-03-25
  • 2015-02-14
相关资源
最近更新 更多