2017-02-07 13 views
1

Я разрабатываю eCommerce (с функцией нескольких атрибутов продукта), используя Laravel 5.4. Все работает нормально. Но когда я пытаюсь синхронизировать несколько значений одного и того же атрибута в сводной таблице. Ларавел игнорирует дубликаты. Например, у меня есть атрибут «Сеть», который имеет 3 значения: 2G, 3G, 4G. Мобильный телефон поддерживает сеть 3G и 4G. Я хочу синхронизировать значение 3G и 4G в базе данных. Ларавель игнорирует один из них.Как синхронизировать несколько значений одного и того же атрибута в 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», что-то вроде этого. Но Ларавел Игнорирует одного из них.

Я спасаю данные так:

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

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

Любые предложения, идеи?

+0

В вашем массиве есть дубликаты ключей. – Neat

+0

В таблице ProductAttributes должно быть поле AttributeValues.ID вместо AttributeID. Таким образом, ассоциация будет уникальной. – Shadow

+0

@ Shadow Отличная точка. Не могли бы вы рассказать мне, как я получу доступ к таблице атрибутов через модель продукта? –

ответ

0

sync() Функция в Laravel автоматически считывает дубликаты. Вы можете заставить его с

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

Удачи!

+1

нерабочий .. :( –