📅  最后修改于: 2023-12-03 15:32:35.604000             🧑  作者: Mango
Laravel 提供了一种名为 Guarded 的保护机制,用于保护模型的属性免于被随意赋值。Guarded 属性定义了哪些模型属性不可随意赋值。同时还可以使用 Mass Assignment 特性来指定哪些属性可以进行批量赋值。
Guarded 属性是一个包含属性黑名单的数组。这些属性不能被随意赋值,除非是使用批量赋值的方式。定义Guarded 属性的方式有两种方法:
protected $guarded = ['id'];
上述代码表示 id
属性不可被随意赋值。
$model->guard(['id']);
以上代码会针对这个模型动态设置 guarded 属性。
Mass Assignment 是一种批量赋值机制。Mass Assignment 可以将所需要的属性作为数组直接传递给模型即可。Guarded 和 Mass Assignment 之间的关系在于,Guarded 决定不可随意赋值的属性,而 Mass Assignment 负责批量赋值中哪些属性被赋值的方便。
$attributes = ['name' => 'John', 'email' => 'john@example.com'];
$task = Task::create($attributes);
$task->fill([
'name' => 'Jane',
'email' => 'jane@example.com'
]);
$task->save();
批量赋值也可以指定 Guarded 属性:
$task->fill([
'name' => 'Jane',
'email' => 'jane@example.com',
'id' => 2 //不可随意赋值属性
]);
class User extends Model
{
protected $guarded = ['id'];
protected $fillable = ['name', 'email'];
}
$user = new User;
$user->name = "John";
$user->email = "john@example.com";
$user->save();
$user->fill([
'name' => 'Jane',
'email' => 'jane@example.com'
]);
$user->save();
以上就是 Laravel 模型 Guard 的介绍了。Guarded 机制可以让我们更安全地使用 Laravel 模型。