【问题标题】:How to create correct relationships in laravel for attributes?如何在 laravel 中为属性创建正确的关系?
【发布时间】:2020-10-14 16:25:05
【问题描述】:

关于我的应用模型


产品

每个产品都有一个类别和多个属性

类别

每个类别都有许多产品和属性

属性

此模型仅包含唯一属性名称。 每个属性按类别具有不同的值(例如,“T 恤”类别中的“尺寸”属性具有“X”、“S”、“XL”等值,而“靴子”类别中的“尺寸”属性具有“39”、“41”、“ 42" 值)。在这种情况下,我无法创建正确的解决方案来创建关系,以便按属性正确获取/搜索产品或使用关系将属性保存/同步到产品。

这是我对数据库结构没有帮助的解决方案

在我的情况下如何正确实现属性?

【问题讨论】:

  • 你的数据库架构看起来有点乱,而且不是正常的形式,也许可以让你的 PHP 解决方案更容易
  • 这就是我寻求建议的原因。我也不是很喜欢我的决定,但这是我目前所能做的。我需要正确的方法来解决问题的最佳解决方案。 @Greedo
  • 对不起,我没有表述清楚。我的问题是,您可以更改数据库架构还是为时已晚?
  • 为什么要在表格中使用通用属性?这似乎太过分了
  • 当然可以更改数据库模式。您会推荐哪种方案? @Greedo

标签: database laravel database-design eloquent relationship


【解决方案1】:

架构更改 (在一些伪代码中)

Product: 
 id
 category_id -> foreign(Categories)->on(id)

Categories:
 id
 
Attributes:
 id

Attribute_values: 
 id

Category_attributes
 category_id    -> foreign(Categories)->on(id)
 attribute_id   -> foreign(Attributes)->on(id)
 
Attributes_attributes_values
 attribute_id   -> foreign(Attributes)->on(id)
 attribute_value_id   -> foreign(Attribute_values)->on(id)

Product_attributes
 Product_id    -> foreign(Categories)->on(id)
 attribute_id   -> foreign(Attributes)->on(id)
 attribute_value_id   -> foreign(Attribute_values)->on(id)

从这个模式你将能够派生:

模型(仍然是简化的伪代码)

Product: 
 $this->belongsTo(Product::class);
 $this->belongsToMany(ProductAttributes::class)->withPivot(attribute_value_id);

通过这两个关系,您将能够过滤属性类型和值

【讨论】:

    猜你喜欢
    • 2018-12-08
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    相关资源
    最近更新 更多