📜  laravel 更新仅更改字段 - PHP (1)

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

Laravel 更新仅更改字段

在开发过程中,我们经常需要更新数据库表中的记录。有时我们只需要更改表中的某些字段,并保留其余字段的值不变。在这种情况下,Laravel 提供了一种简单的方法来更新仅更改字段的记录。

用法

要更新表中的记录,我们可以使用 Eloquent 模型的 update 方法。此方法接受一个包含要更新的字段和它们的新值的关联数组。例如,如果我们要更新用户的名字和姓氏字段,我们可以使用如下代码:

$user = User::find($id);

$user->update([
    'first_name' => 'John',
    'last_name' => 'Doe',
]);

这将在数据库中更新用户的记录,并将 first_namelast_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',
]);

这将只会更新用户的名字字段,并保留其余字段的值不变。