2016-09-16 9 views
0

hello、私の英語のために申し訳ありません。私は私の問題を説明しようとします。Laravelの右の関係

たとえば、Productというモデルがあります。

各製品は、いくつかのオプションがあります。

product_1 : option_1 = 50, option_2 = 14, option_3 = 23 

正しい方法ですいただきましたか?

まず -

id | title | option_1 | option_2 | option_3 

第二のように、データベースを作成する -

ProductModel hasMany optionModel 
OptionModel belongsToMany ProductModel 

tables in databases: Product, Option, Product_Option_Relationships 

第三のように、モデルとテーブルを作成 -

$options = collect([ 
    ['id' => '1', 'name' =>'option1'], 
    ['id' => '2', 'name' =>'option2'], 
]); 

のように機能し、テーブルProduct_Option_Relationshipsにいくつかのコレクションを作成します表:id | product_id | option_id

最初に - その大きすぎるテーブル、20のオプションがある場合、2番目の - 情報機能のための新しいモデルを作成する、私は今、その正常なのではない?第三 - ビューでは難しいオプション名を表示する。

ありがとう、私を理解していただきありがとうございます。

答えて

0

2番目の方法を使用します。繰り返されるオプションはありません。たとえば:

製品

id | name 
---|------ 
1 | Car 
2 | Bike 

オプション

id | name 
-----|------------ 
1 | Transport 

option_product

option_id | product_id 
------------|------------- 
1   | 1 
1   | 2 

他の方法を使用して、二回オプショントランスポートを持っているでしょう。

1

一般的に1対多、多対多の関係 そして、あなたは自由にあなたのテーブルの上にそれを適用する列全体を変更することなく、任意のレコードを編集することができ、そのために利益を使用します。
まず、我々はproductsテーブルを持っていますオプションforeach を必要とするので、一般的にオプションを組み合わせようとしているoptionsテーブルを持っていなければなりません。options & productsの両方のためのキーを含む新しいテーブルassignOptionsToProductsを追加します。好きなように多対多または多対多の関係

Products Table 
id | Name 
1 | Product A 
2 | Product B 

Options Table 
id | Name 
1 | Option A 
2 | Option B 

AssignOptionsToProducts Table 
id | Product_id | Option_id 
1 | 1   | 1 
2 | 1   | 2 
3 | 2   | 2 

あなたは私たちが同じオプションを割り当てられて何度 を見ることができますそして、我々は他のテーブルの各レコードを変更することなく、そしてもちろんあなたができるすべてのオプションを変更したいときに簡単に

0

あなたが使用することができ、各テーブルを何度も使用することができたよう多対多の関係などのように、それを構造化することができます

製品モデル

class Product extends Model { 
    ... 

    public function options() { 
     return $this->belongsToMany('App\Product', 'product_options', 'product_id', 'option_id'); 
    } 
} 

オプションモデル

class Option extends Model { 
    ... 

    public function product() { 
     return $this->belongsToMany('App\Option', 'product_options', 'option_id', 'product_id'); 
    } 
} 

あなたは仕事に、このための3つのテーブルが必要になります。

Table products 

id | name 
----------------- 
1 | iBeacon 
2 | Intel Edison 

Table options 

id | name 
---------- 
1 | Price 
2 | Size 

Table product_options 

id | option_id | product_id 
--------------------------- 
1 |  1  |  2 
2 |  2  |  2 

あなたはオプションのテーブルやピボットテーブルのオプション値を持つレコードを保存したい場合は、選択することができます。私はオプションテーブルを小さく保つためにピボットテーブルにそれらを配置します。

今、あなたはそのようなあなたの製品にオプションを割り当てることができるようになります:

... 
// Assing options to a product 
$product->options()->sync([$optionID, $optionID]); 

// Get product's options 
$product->options; 

// Get products having certain option 
$option->products; 
...