Laravel 中的可填充和守卫有什么区别?

ste*_*enn 5 laravel laravel-routing

我是 Laravel 的新手,想通过示例来理解这一点。Laravel 中可填充和守卫之间的主要区别是什么?这些是怎么区分的?请分享一个基本的例子。

Ade*_*och 9

示例 1

protected $fillable = ['name', 'email'];
Run Code Online (Sandbox Code Playgroud)

这意味着我们只想插入姓名和电子邮件列值

示例 2

protected $guarded = ['name', 'email'];
Run Code Online (Sandbox Code Playgroud)

这意味着我们只想忽略姓名和电子邮件我们不想插入姓名和电子邮件列的值

示例 3

protected $fillable = [];
Run Code Online (Sandbox Code Playgroud)

我们要插入所有列值


小智 8

首先,作为新手,请参阅 laravel 网站上的文档。我想您是在问可填充与受保护的问题。

Fillable 已准备好进行批量分配,即您可以将 fill() 与值集数组一起使用,而不是一对一分配。下面的姓名和电子邮件是可填写的。

 class User extends Eloquent{
  public $timestamps = false;
  protected $fillable = ['name', 'email'];
}  

....
    $user = User::create($request->all);
Run Code Online (Sandbox Code Playgroud)

保护与可填充正好相反。

请记住,还有一个“隐藏”,这意味着它不可用于 json 解析。所以如果你使用

 return User::all();
Run Code Online (Sandbox Code Playgroud)

返回的 json 将跳过隐藏中提到的所有字段。此外,隐藏并不明确意味着受到保护。


小智 6

在 Laravel 中,$fillable属性用于指定那些可批量分配的字段。$guarded属性用于指定那些不可批量分配的字段。

$fillable充当应可批量分配的属性的“白名单”,$guarded其作用正好相反,作为不应批量分配的属性的“黑名单”。

如果我们想阻止所有字段被批量分配,我们可以使用:

protected $guarded = ['*'];

如果我们想让所有字段都可批量分配,我们可以使用:

protected $guarded = [];

如果我们想让一个特定的字段可批量分配,我们可以使用:

protected $fillable = ['fieldName'];

最后,如果我们想阻止特定字段被批量分配,我们可以使用:

protected $guarded = ['fieldName'];