Я пытаюсь синхронизировать сводную таблицу, но результаты периодически обновляются при каждом обновлении страницы.
Моя сводная таблица содержит следующие поля
- page_id
- product_id
- tab_id
Данные, отправленные в моей форме, представлены следующим образом:
Array
(
[page] => 1
[product_ids] => Array
(
[1] => Array
(
[0] => 818051BEC7ECC6715FDDF1F895350677
)
[2] => Array
(
[0] => a0e2a2c563d57df27213ede1ac4ac780
[1] => 8a1e808b55fde9455cb3d8857ed88389
)
[3] => Array
(
[0] => C8CCE4FED350D439C90EAEA7C43321EC
[1] => f4dd765c12f2ef67f98f3558c282a9cd
[2] => 5055cbf43fac3f7e2336b27310f0b9ef
)
[4] => Array
(
[0] => 456ac9b0d15a8b7f1e71073221059886
[1] => 7fec306d1e665bc9c748b5d2b99a6e97
[2] => db576a7d2453575f29eab4bac787b919
[3] => 6c340f25839e6acdc73414517203f5f0
)
)
)
Я хочу синхронизировать идентификаторы продуктов со своей страницей и использоватьключи для product_ids в поле tab_id
.
Вот мой метод хранения.(примечание: я намеренно помещаю команду exit;
в конце, чтобы я мог многократно обновлять страницу и отправлять одни и те же данные без необходимости каждый раз заполнять форму.
public function store(Request $request)
{
$page = Page::find($request->input('page));
$product_ids = $request->input('product_ids');
if ($page)
{
$syncData = [];
foreach ($product_ids as $tab => $products)
{
$data = array_map(function ($item) use ($tab)
{
$arr = [
'tab_id' => $tab,
'product_id' => $item,
];
return $arr;
}, $products);
$syncData = array_merge($syncData, $data);
}
$page->products()->sync($syncData);
}
exit;
}
Если вывести $syncData на страницу непосредственно перед синхронизацией, я вижу следующее
Array
(
[0] => Array
(
[tab_id] => 1
[product_id] => 818051BEC7ECC6715FDDF1F895350677
)
[1] => Array
(
[tab_id] => 2
[product_id] => a0e2a2c563d57df27213ede1ac4ac780
)
[2] => Array
(
[tab_id] => 2
[product_id] => 8a1e808b55fde9455cb3d8857ed88389
)
[3] => Array
(
[tab_id] => 3
[product_id] => C8CCE4FED350D439C90EAEA7C43321EC
)
[4] => Array
(
[tab_id] => 3
[product_id] => f4dd765c12f2ef67f98f3558c282a9cd
)
[5] => Array
(
[tab_id] => 3
[product_id] => 5055cbf43fac3f7e2336b27310f0b9ef
)
[6] => Array
(
[tab_id] => 4
[product_id] => 456ac9b0d15a8b7f1e71073221059886
)
[7] => Array
(
[tab_id] => 4
[product_id] => 7fec306d1e665bc9c748b5d2b99a6e97
)
[8] => Array
(
[tab_id] => 4
[product_id] => db576a7d2453575f29eab4bac787b919
)
[9] => Array
(
[tab_id] => 4
[product_id] => 6c340f25839e6acdc73414517203f5f0
)
)
Когда моя сводная таблица пуста и я запускаю скрипт, все синхронизируется правильно. Я получаю 10 строк, добавленных в мою сводную таблицу с идентификаторами вкладокустановлен правильно. Пока все хорошо.
Однако, если я обновлю страницу (снова отправив форму), некоторые строки исчезнут из сводной таблицы. В итоге получится шесть строк, а не десять. Значенияоставшиеся верны, но четыре отсутствуют.
Очистка сводной таблицы и повторная попытка дают точно такие же результаты. Я заметил, что если я изменю значения product_ids, удаляется другое количество. Иногда яосталось 8 строк, но снова меняя значения, я могу остаться с 7.
Чего мне не хватает?