2016-11-15 7 views
0

こんにちは私は多対多の関係とジャンクションテーブルを持つ2つのテーブルを持っています。要するに、価格を付け加えた異なる属性を持つ製品。 私は製品と属性のテーブルです。属性(バリアント)データベース設計の製品?

:Laravelとして

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

は、私は主キーを持っている attribute_productテーブルをしたいと私は $product->attribute->attach()を呼び出すとき、それは自動的にそれをインクリメントし、私は次の操作を行うことができ、複数列の主キーをサポートしていません。私の頭の中で +---------+----------------------+ | cart | cart_product | +---------+----------------------+ | id | cart_id | | user_id | attribute_product_id | +---------+----------------------+

私はつもりはattribute_productテーブル用のモデルを作成し、複数のアイテムを持つことができItemため、カートと呼んだ、と$cart->items->groupBy('product_id')はので、私はそこにそれをすべて持つことができるように、私はそれを表示することができますユーザのカート。

いずれかの解決策またはより良い提案は非常に高く評価されています。

答えて

0

まあ、あなたは正しい方法で焦点を合わせていないかもしれないと思います。 belongsToManyの関係がの商品の属性の場合は、の商品は異なる商品ではなく複数の属性を持つ可能性があります。

カートには、製品の特定の属性ではなく、製品を追加する必要があります。例:

私は水ボトルが欲しいですが、水だけ、ボトルなしです。

これは意味をなさないが、ボトルなしでウォーターボトルを購入することはできません。その場合、あなたは水ではなく、同じものでなければならない異なった製品でなければならない水のボトルを購入するでしょう。

cart_productテーブルは、そうすることができない理由がない限り、このようになります。

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

たとえば、製品が1つの属性に2つの値を持つ場合、たとえば教えてください。サイズは小と大の両方が可能です。カート内の製品が大型か小型かをどのように知ることができますか? –

+0

@ArmanMomeni大丈夫、私はあなたが言うことを見る。とにかく、製品は製品でなければならず、人々はカートに製品を追加します。あなたのアプローチでは可能ですが、商品に異なる属性がない場合はどうなりますか?必要がない場合は、行を作成する必要があります。サイズごとに製品を作成し、 '属性'テーブルの名前を 'コレクション 'のようなものに変更することを関連付けると思います。次に、商品を表示すると、同じ商品のさまざまなオプションがある場合、amazonのように同じコレクションの商品をさまざまなオプションで表示することもできます。 –

+0

最後に、 "同じ"製品のそれぞれのサイズがバックエンド上で異なる一意のコードを持つことが想定されています。もちろん、すべてはあなたが最後に望むものに依存します。 –

関連する問題