产品具有属性(变体)数据库设计?

时间:2016-11-15 09:03:00

标签: php mysql laravel web database-design

您好我有两个表有多对多关系和一个联结表。 简而言之,具有不同属性的产品会增加价格。 让它更清楚我是产品和属性表。

+-------------+-----------+-------------------+ | product | attribute | attribute_product | +-------------+-----------+-------------------+ | id | id | product_id | | name | name | attribute_id | | description | | attribute_value | | price | | added_price | +-------------+-----------+-------------------+

由于Laravel不支持多列主键,我希望attribute_product表具有主键,当我调用$product->attribute->attach()时,它会自动递增它,所以我可以执行以下操作:

+---------+----------------------+ | cart | cart_product | +---------+----------------------+ | id | cart_id | | user_id | attribute_product_id | +---------+----------------------+

在我脑海中,我要为attribute_product表制作一个模型并将其称为Item,因此购物车可以有多个商品,我可以像$cart->items->groupBy('product_id')那样展示它,所以我可以在用户的​​购物车中拥有它。

非常感谢任何解决方案或更好的建议。

1 个答案:

答案 0 :(得分:0)

嗯,我想也许你并没有以正确的方式关注它。如果产品属性之间存在belongsToMany关系,那是因为产品可能具有多个属性而不是不同的产品

在购物车中,您应添加产品,而不是产品的特定属性。例如:

  

我想要一个水瓶,但只有水,没有瓶子。

这没有任何意义,你不能在没有瓶子的情况下买一瓶水。在这种情况下,你将购买水,而不是水瓶,这应该是不同的产品,而不是同一种产品。

cart_product表应该如下所示,只要没有令人信服的理由为什么它不能如此。

 +---------+----------------------+
 |  cart   |     cart_product     |
 +---------+----------------------+
 | id      | cart_id              |
 | user_id | product_id           |
 +---------+----------------------+