📜  laravel 忽略 mutators (1)

📅  最后修改于: 2023-12-03 14:43:48.147000             🧑  作者: Mango

Laravel 忽略 Mutators

在 Laravel 中,Mutators 是用于修改模型属性的值的一种强大机制。但有时候,我们需要在某些情况下忽略掉 Mutators,比如在使用 Eloquent 的 update() 方法时。本文将介绍在 Laravel 中如何忽略 Mutators。

什么是 Mutators

在 Laravel 中,Mutators 是用于修改模型属性值的函数。这些函数命名通常以 set 开头,例如:

public function setPasswordAttribute($value)
{
    $this->attributes['password'] = bcrypt($value);
}

上述代码中,setPasswordAttribute 方法会在设置 password 属性值时被自动调用。该方法将传入的 $value 值加密后再赋值给模型的 password 属性。

忽略 Mutators

当我们需要在不触发 Mutators 的情况下修改模型的属性时,可以使用 $model->forceFill($attributes) 方法。该方法会填充 $attributes 数组中指定的属性值,并将这些值直接设置到模型的属性中,而不会触发任何 Mutators。

示例代码:

$user = User::find(1);

$user->forceFill([
    'name' => 'John Doe',
    'email' => 'john@example.com'
]);

$user->save();

这段代码会更新 nameemail 属性的值,而不会触发任何 Mutators。

总结

在 Laravel 中,使用 Mutators 可以方便地修改模型属性的值。但有时候我们需要忽略 Mutators,例如在使用 update() 方法时。Laravel 提供了 forceFill() 方法来实现这一目的,它能够直接给模型属性赋值,而不触发任何 Mutators。