【问题标题】:Products with attributes (variants) database design?产品具有属性(变体)数据库设计?
【发布时间】:2017-03-29 02:13:41
【问题描述】:

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

+-------------+-----------+-------------------+ | 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') 一样显示它,这样我就可以把它全部放在里面用户的购物车。

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

【问题讨论】:

    标签: php mysql laravel web database-design


    【解决方案1】:

    嗯,我认为你可能没有以正确的方式关注它。如果您在 productattribute 之间有belongsToMany 关系,是因为一个产品可能有多个属性而不是不同的产品。。 p>

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

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

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

    cart_product 表应该是这样的,只要没有令人信服的理由不能这样。

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

    【讨论】:

    • 那么告诉我,如果一个产品例如有一个属性的 2 个值,例如大小可以是小和大。我如何知道购物车中的产品是大还是小?
    • @ArmanMomeni 好的,我明白你在说什么。无论如何,产品应该是产品,人们将产品添加到购物车中。您的方法可以做到这一点,但是当产品没有不同的属性时会发生什么?不需要时,您必须创建一行。我想我会为每种尺寸创建一个产品,然后将它们关联起来,将attributes 表重命名为collections。然后,当您展示产品时,您还可以将同一系列的产品显示为不同的选项,就像亚马逊在“相同”产品有不同选项时所做的那样。
    • 最后,假设“相同”产品的每个不同尺寸在后端都会有不同的唯一代码。当然,一切都取决于你最终想要什么。
    猜你喜欢
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 2021-06-05
    相关资源
    最近更新 更多