📌  相关文章
📜  laravel eloquent 更新多条记录 - PHP (1)

📅  最后修改于: 2023-12-03 15:17:12.532000             🧑  作者: Mango

Laravel Eloquent 更新多条记录

在Laravel中,Eloquent是用于处理数据库模型的一种优雅的方式。它可以用来执行诸如插入,更新和查询等各种操作。当你需要更新多条记录时,Eloquent也提供了简单的方法。

更新多条记录

要更新多条记录,你可以使用Eloquent的update方法。该方法需要一个数组作为参数,其中每个键表示要更新的列名,它的值是要更新的值。

DB::table('users')
    ->where('status', 1)
    ->update(['status' => 0]);

上面的代码将users表中状态为1的所有记录的status列更新为0。这种方法非常适用于更新大量数据,因为它只需要执行一次查询。

批量更新模型

你也可以使用模型来批量更新记录。首先,你需要获取要更新的模型记录,之后对他们进行更改即可,最后使用saveMany方法提交更改。

$users = User::where('status', 1)->get();
$users->each(function ($user) {
    $user->status = 0;
});
$users->saveMany();

上面的代码将所有状态为1的用户记录的状态更改为0。这种方法使用了Eloquent的saveMany方法保存一批记录。

批量更新特定列

如果你只需要更新表中的某个特定列,可以使用update方法(这个方法将返回受影响的行数)。

User::where('status', 1)->update(['status' => 0]);

上面的代码将所有状态为1的用户记录的status列更新为0

使用条件批量更新记录

有时,你只想更新符合特定条件的记录。在这种情况下,你可以使用when方法来添加更新条件。

例如,下面的代码将更新users表中的所有记录,如果登录时间在过去的三个月内,则将状态更改为0

User::query()
  ->when(now()->subMonths(3), function ($query) {
      return $query->where('last_login_at', '>', now()->subMonths(3));
  })
  ->update(['status' => 0]);

上面的代码使用了Laravel的查询构建器来构建查询。when方法用于添加条件,当传入的值是true时,它会将闭包中的查询添加到主查询中。在本例中,如果时间在过去的三个月内,则会添加一些查询条件。

总结

Eloquent提供了简便的方法来更新多条记录。在本文中,我们已经了解了如何使用Eloquent的update方法和使用模型批量更新记录。我们还谈到了如何使用条件更新记录,以查找符合特定条件的记录,然后对它们进行更改。