更新多个字段时,laravel数据透视表同步无法正常工作

时间:2019-06-17 09:44:22

标签: laravel pivot-table

我试图同步数据透视表,但是每次刷新页面时结果都是零星的。

我的数据透视表包含以下字段

  • 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
        )
    )
)

我想将产品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行。

我想念什么?

0 个答案:

没有答案