sha*_*dav 3 php mysql laravel eloquent
我想在Laravel中批量更新我的记录,但是记录没有更新。每个ID都有不同的记录。以下是我正在尝试的。
$ids = [5,6,8,9],
$updated_array = [
['name' => 'tarun'],
['name' => 'Akash'],
['name' => 'Soniya'],
['name' => 'Shalu'],
];
Model::whereIn('id', $ids)->update($updated_array);
Run Code Online (Sandbox Code Playgroud)
小智 10
您可以使用Laravel Upsert进行批量更新。例如 :
User::query()->upsert([
['id' => 1, 'email' => 'dadan@example.com'],
['id' => 2, 'email' => 'satria@example.com'],
], 'email');
Run Code Online (Sandbox Code Playgroud)
Laravel 8 或更高版本中提供此功能
当您尝试将多行更新为相同值时,将使用批量更新。您不能使用不同的值进行批量更新。
因此,这将起作用,但是会将所有匹配的记录更新为“ tarun”的名称:
Model::whereIn('id', $ids)->update(['name' => 'tarun']);
Run Code Online (Sandbox Code Playgroud)
例如,您可以执行以下操作:
foreach($ids as $key => $id) {
Model::where('id', $id)->update($updated_array[$key]);
}
Run Code Online (Sandbox Code Playgroud)
但是据我所知,没有在Laravel中运行4个查询并编写原始SQL语句来完成此操作的方法将是一团糟。