什么是Laravel中的Mutators和Accessors

时间:2018-04-22 19:24:06

标签: laravel accessor mutators

我正在努力了解访问者和访问者变异器以及为什么我需要它们。我的另一个问题是属性方法的中间部分,例如:

访问器

public function getFirstNameAttribute($value)
{
   return ucfirst($value);
}

的Mutator:

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

在这里,我们可以看到getFirstNameAttribute和setFirstNameAttribute方法,但我还没有能够清除它们的中间部分 FirstName 。我真的很感激能够得到更好的解释和友好的合作。

2 个答案:

答案 0 :(得分:1)

访问者在对象上创建一个“假”属性,您可以像访问数据库列一样访问该属性。因此,如果您的人具有first_namelast_name属性,则可以写下:

public function getFullNameAttribute()
{
  return $this->first_name . " " . $this->last_name;
}

然后你可以拨打$user->full_name并返回访问者。它将函数名称转换为snake_case属性,因此可以通过getFooBarBazAttribute访问$user->foo_bar_baz函数。

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

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

然后,如果您在数据库中执行$user->email = "EMAIL@GMAIL.com"; $user->save();,则会设置email@gmail.com

答案 1 :(得分:0)

docs访问者和mutator中,两者都是Laravel模型中的公共函数,用于获取和设置模型的属性

当尝试检索first_name属性的值时,Eloquent会自动调用访问者

$fullName = $user->full_name;

用于自定义模型的属性或添加虚假属性

另一方面, mutator 用于设置模型的真实属性

当我们尝试设置属性的值

时,将自动调用Mutator