Laravel 中的 Mutators 和 Accessors 是什么

5 accessor mutators laravel

我试图了解访问器和修改器以及我为什么需要它们。我的另一个问题是属性方法的中间部分,例如:

存取器

public function getFirstNameAttribute($value)
{
   return ucfirst($value);
}
Run Code Online (Sandbox Code Playgroud)

突变体:

public function setFirstNameAttribute($value)
{
    $this->attributes['first_name'] = strtolower($value);
}
Run Code Online (Sandbox Code Playgroud)

在这里,我们可以看到 getFirstNameAttribute 和 setFirstNameAttribute 方法,但我无法清除它们的中间部分FirstName。如果有更好的解释和友好的合作,我将不胜感激。

Jef*_*eff 11

访问器在对象上创建一个“假”属性,您可以像访问数据库列一样访问该属性。所以如果你的人有first_namelast_name属性,你可以写:

public function getFullNameAttribute()
{
  return $this->first_name . " " . $this->last_name;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以调用$user->full_name它,它会返回访问器。它将函数名转换成一个 snake_case 属性,因此getFooBarBazAttribute可以通过$user->foo_bar_baz.

Mutator 是一种在设置时更改数据的方法,因此如果您希望数据库中的所有电子邮件都为小写,您可以这样做:

public function setEmailAttribute($value)
{
  $this->attributes['email'] = strtolower($value);
}
Run Code Online (Sandbox Code Playgroud)

然后如果你$user->email = "EMAIL@GMAIL.com"; $user->save();在数据库中做了它会设置email@gmail.com

  • “就好像它是一个数据库列”= 准确的解释。赞成! (2认同)
  • 我不认为‘“假”属性’这句话是完全正确的。由于您可以调用“$model->name”并且“name”属性指向有效的表列,因此您仍然可以拥有“getNameAttribute”访问器。访问器是您想要在需要时更改数据的地方。 (2认同)