我试图同步数据透视表,但是每次刷新页面时结果都是零星的。
我的数据透视表包含以下字段
我提交的表单上发布的数据如下
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
)
)
)
我想将产品ID与我的页面同步,并在tab_id
字段中使用product_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行添加到数据透视表中,并且标签ID设置正确。到目前为止一切顺利。
但是,如果刷新页面(再次提交表单),则某些行将从数据透视表中消失。我最后排了六排,而不是十排。保留的值是正确的,但缺少四个。
清除数据透视表并重试会产生完全相同的结果。我注意到,如果我更改product_id的副词,则会删除不同的金额。有时我剩下8行,但是再次更改值,我可能剩下7行。
我想念什么?