使用updateOrInsert()方法批量插入/更新并获取Array到字符串的转换

时间:2019-08-26 14:14:35

标签: php mysql laravel-5.8

我正在尝试使用updateOrInsert()方法批量插入和更新。但我越来越数组到字符串对话错误(通过捕获)。任何想法请告诉。谢谢。

$arr = [];
for ($i=0; $i < count($request->data); $i++) {
    $arr[] = [
             'month' => $request->End_month,
             'year' => $request->start_Year,
             'data' => str_replace(',' ,'', $request->data[$i]),
             'cats' => $request->cat[$i],
             'created_by'=> $this->createdBy()
    ];
 }    //end for
 try {
     DB::table('total_ports')->updateOrInsert(
         ['year' => $request->start_Year], $arr
     );

    return redirect()->back()->with('successmsg', 'Lorem ipsum');
} catch (Exception $e){
    return $e->getMessage();
}

1 个答案:

答案 0 :(得分:0)

看看:

https://laravel.com/api/master/Illuminate/Database/Query/Builder.html#method_updateOrInsert

在您的代码中,您正在将多维数组传递给第二个参数(而不是一维数组)。该函数将把该数组作为

[['key' => 'value'], ['key' => 'value'], ['key' => 'value'], ['key' => 'value']];

然后它将获取每个单独的内部数组,并尝试将它们解释为列/字段名称。因此它正在尝试将['key' => 'value']转换为字符串。对于您的更新,除非一次尝试更改多个行,否则您将需要一次执行一次。在这种情况下,您可以结合使用where()和update()