Laravel批量更新多个记录ID

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 或更高版本中提供此功能


Dev*_*von 5

当您尝试将多行更新为相同值时,将使用批量更新。您不能使用不同的值进行批量更新。

因此,这将起作用,但是会将所有匹配的记录更新为“ 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语句来完成此操作的方法将是一团糟。

  • 如果有 10000 条记录,那么将执行 10000 条。为一个简单的操作执行 10000 条查询有意义吗? (4认同)
  • 如果它们都是不同的查询,那么是的。你没有用相同的值更新它...... (3认同)