📜  laravel 模型 quard - PHP (1)

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

Laravel 模型 Guard

Laravel 提供了一种名为 Guarded 的保护机制,用于保护模型的属性免于被随意赋值。Guarded 属性定义了哪些模型属性不可随意赋值。同时还可以使用 Mass Assignment 特性来指定哪些属性可以进行批量赋值。

Guarded 属性

Guarded 属性是一个包含属性黑名单的数组。这些属性不能被随意赋值,除非是使用批量赋值的方式。定义Guarded 属性的方式有两种方法:

  1. 在模型上定义:
protected $guarded = ['id'];

上述代码表示 id 属性不可被随意赋值。

  1. 动态设置:
$model->guard(['id']);

以上代码会针对这个模型动态设置 guarded 属性。

Mass Assignment

Mass Assignment 是一种批量赋值机制。Mass Assignment 可以将所需要的属性作为数组直接传递给模型即可。Guarded 和 Mass Assignment 之间的关系在于,Guarded 决定不可随意赋值的属性,而 Mass Assignment 负责批量赋值中哪些属性被赋值的方便。

  1. 基本用法:
$attributes = ['name' => 'John', 'email' => 'john@example.com'];
$task = Task::create($attributes);
  1. 批量赋值:
$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 模型。