📅  最后修改于: 2023-12-03 15:32:35.357000             🧑  作者: Mango
在开发过程中,我们经常需要更新数据库表中的记录。有时我们只需要更改表中的某些字段,并保留其余字段的值不变。在这种情况下,Laravel 提供了一种简单的方法来更新仅更改字段的记录。
要更新表中的记录,我们可以使用 Eloquent 模型的 update
方法。此方法接受一个包含要更新的字段和它们的新值的关联数组。例如,如果我们要更新用户的名字和姓氏字段,我们可以使用如下代码:
$user = User::find($id);
$user->update([
'first_name' => 'John',
'last_name' => 'Doe',
]);
这将在数据库中更新用户的记录,并将 first_name
和 last_name
字段的值设置为 'John'
和 'Doe'
。
如果我们只想更新某一字段,而不更改其他字段的值,我们可以使用 update
方法的另一个变体,它称为 updateOnly
。这个方法接受一个包含要更新的字段和它们的新值的关联数组。但与普通的 update
方法不同,它只更新指定的字段,不更改其他字段的值。例如,如果我们只想更新用户的名字字段,我们可以使用如下代码:
$user = User::find($id);
$user->updateOnly([
'first_name' => 'John',
]);
这只会在数据库中更新用户的记录,并将 first_name
字段的值设置为 'John'
。其余的字段的值保持不变。
当使用 updateOnly
方法时,我们需要小心,确保我们只更新了我们打算更新的字段。任何没有包含在更新数组中的字段也将被更新,并被赋予其默认值。为了避免这种情况,我们可以使用 Eloquent 模型的 fillable
属性来定义可以批量赋值的字段,并使用 only
方法来选择要更新的字段。例如,如果我们只想更新用户的名字字段,并防止更新其他敏感字段,我们可以定义模型如下:
class User extends Model
{
protected $fillable = [
'first_name'
];
}
然后,我们可以使用以下代码更新用户的记录:
$user = User::find($id);
$user->only('first_name')->updateOnly([
'first_name' => 'John',
]);
这将只会更新用户的名字字段,并保留其余字段的值不变。