2017-02-07 40 views
1

Laravel 5.4を使用したeコマース(複数の商品属性機能付き)ウェブサイトを開発しています。すべてがうまくいきます。しかし、ピボットテーブルで同じ属性の複数の値を同期しようとすると、ラーヴェルは重複しているペアを無視します。たとえば、2G、3G、4Gの3つの値を持つ「ネットワーク」という属性があります。モバイルは3Gと4Gネットワ​​ークをサポートしています。私はデータベースに3Gと4Gの値を同期したい。 Laravelはそれらの1つを無視します。Laravelの同じ属性の複数の値を同期するにはどうすればよいですか?

Products Table: 

ID - Product Name 
1 - Test Mobile 



Attributes Table 

ID - AttributeName 
1 - Network 



AttributeValues Table 

ID - AttributeID - AttributeValue 
1 - 1   - 2G 
2 - 1   - 3G 
3 - 1   - 4G 



ProductAttributes Table 

ID - AttributeID - ProductID - AttributeValue 
1 - 1   - 1   - 3G 
1 - 1   - 1   - 4G 

"ProductAttributes"テーブルに商品属性を保存するとします。しかしLaravelそれらの1つを無視してください。

私はそのようなデータを保存しています:

$product = Product::create([ 
     'name' => 'Test Mobile' 
    ]); 

    $product->attributes()->sync([ 
     1 => ['AttributeValue' => '3G'], 
     1 => ['AttributeValue' => '4G'] 
    ]); 

任意の提案、アイデア?

+0

アレイに重複するキーがあります。 – Neat

+0

ProductAttributesテーブルには、AttributeIDの代わりにAttributeValues.IDフィールドが必要です。この方法では、関連付けは一意になります。 – Shadow

+0

@Shadow素晴らしい点。製品モデル経由でテーブルの属性にアクセスする方法を教えてください。 –

答えて

0

sync() Laravelの関数は自動的に重複の読み取りを取得します。あなたはそれを強制することができます

$product->attribute()->syncWithoutDetaching([ 
    1 => ['AttributeValue' => '3G'], 
    1 => ['AttributeValue' => '4G'] 
]); 

幸運な仲間!

+1

は動作しません.. :( –

関連する問題