我正在构建一个平台,供应商可以在其中添加产品,店主可以将这些产品“复制”到他们的商店并进行销售。
供应商可以创建产品,他可以向产品添加各种属性,例如尺寸、颜色。
当商店想要使用供应商的一种产品时,他可以选择他想要提供的属性。例如,如果供应商提供 3 种尺寸的 T 恤。商店可能会选择出售只有 2 种尺码的 T 恤。
所以我有一个看起来像这样的 Products 表。供应商在这里添加产品。
+----+-------------+-------+
| id | description | price |
+----+-------------+-------+
| 1 | T-Shirt | 10 |
| 2 | Car | 100 |
+----+-------------+-------+
我有一个产品属性表,也是由供应商填写的
+------------+-------------+------------------------------+
| product_id | description | options |
+------------+-------------+------------------------------+
| 1 | size | ["small", "medium", "large"] |
| 1 | color | ["white", "black"] |
+------------+-------------+------------------------------+
店面
当店主想要产品时。我在shop_products表中做记录,引用哪个Shop要什么Product,并添加一个可选的图片,如下
+---------+------------+-----------+
| shop_id | product_id | image |
+---------+------------+-----------+
| 1 | 2 | image.jpg |
| 1 | 3 | image.jpg |
+---------+------------+-----------+
Now the only issue remaining is: How do I make sure the Shop can choose which attributes he wants to take.
- 我应该创建一个 shop_product_attributes 表..但是我不能在多对多上建立关系,因为它没有 ID?
最佳答案
如果可以更改您的数据库结构,我会这样做,我知道这对您所拥有的有所改变,但我认为您必须将产品视为一种关系,这是因为尽管 t -shirt 是一种产品,实际的黑色中号 t 恤与黑色小号 t 恤是完全不同的产品,您的供应商几乎肯定会以这种方式引用它们
您的产品表看起来像这样,但它不是引用产品的主表,它包含产品将具有的通用内容,例如描述 或名字
+----+-------------+-------+-----------+-------------+
| id | name | price | image | description |
+----+-------------+-------+-----------+-------------+
| 1 | Super-T | 10 | image.jpg | some text |
| 2 | Focus | 100 | image.jpg | some text |
+----+-------------+-------+-----------+-------------+
您的主表将是一个 sku 表,将其视为您的产品,如果您有任何 sku 特定的东西,您可以将它们放在这里
+----+-------------+------------+--------------+
| id | sku | product_id | category |
+----+-------------+------------+--------------+
| 1 | p1-cb-m | 1 | t-shirt |
| 2 | p2-cb-s | 2 | t shirt |
+----+-------------+------------+--------------+
然后有一个 attributes_sku 表,这会将 sku 链接到属性
+---------------+--------------+
| sku_id | attribute_id |
+---------------+--------------+
| 1 | 1 |
| 1 | 2 |
+---------------+--------------+
归一化的属性
+----+-------------+------------+
| id | type | name |
+----+-------------+------------+
| 1 | color | black |
| 1 | size | medium |
+----+-------------+------------+
商店Sku表
+---------+------------+
| shop_id | sku_id |
+---------+------------+
| 1 | 1 |
| 1 | 2 |
+---------+------------+
这样做的好处是你可以做到
foreach $shop->skus where category = t-shirt
显示他们所有的 T 恤
然后你可以做 $skus->product->name
$skus->product->attribute->name
或更好的是在 sku 模型上设置一个关系为颜色 $this->attribute->where('type', color)
;
备注 一个小提示,我会通过一个类别和类型表进一步规范化,所以你的属性类型实际上是一个 type_id,它是一个类型表的归属关系,而你的 sku 类别将是一个类别_id,到一个类别表,如果您的类别或类型决定更改名称,那么将来就是这样,您不必编辑 1000 条记录等
关于mysql - Laravel,多对多表中具有属性的产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44302542/