Как синхронизировать несколько значений одного и того же атрибута в Laravel?

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

Products Table:

ID - Product Name
1  - Test MobileAttributes Table

ID - AttributeName
1 - NetworkAttributeValues Table

ID - AttributeID - AttributeValue
1  - 1           - 2G
2  - 1           - 3G
3  - 1           - 4GProductAttributes 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']
]);

Есть предложения, идеи?

1

Решение

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

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

Удачи, приятель!

0

Другие решения

Используйте метод синхронизации для хранения / обновления данных в контроллере, используя отношения:

$product-> attribute()->sync($request->input('product_ids', []));
0