laravel :模型之访问器与修改器
作用:访问器和修改器允许你在获取模型属性或设置其值时格式化 Eloquent 属性。例如,你可能想要使用 Laravel 加密器对存储在数据库中的数据进行加密,并且在 Eloquent 模型中访问时自动进行解密。
定义访问器:
public function getFooAttribute($value){ //这里可以对 $value 做一些转换等操作 return $vlaue; }
其中,Foo
代表对应的属性,使用「驼峰式」命名。
定义修改器:
public function setFooAttribute($value) { $this->attributes['foo'] = strtolower($value); }
访问器 & 修改器
定义访问器
要定义一个访问器,需要在模型中创建一个 getFooAttribute
方法,其中 Foo
是你想要访问的字段名(使用驼峰式命名规则)。在本例中,我们将会为 first_name
属性定义一个访问器,该访问器在获取 first_name
的值时被 Eloquent 自动调用:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* 获取用户的名字
*
* @param string $value
* @return string
*/
public function getFirstNameAttribute($value)
{
return ucfirst($value);
}
}
正如你所看到的,该字段的原生值被传递给访问器,然后返回处理过的值。要访问该值只需要简单访问 first_name
即可:
$user = App\User::find(1);
$firstName = $user->first_name;
当然,你也可以使用访问器将已存在的属性转化为全新的、经过处理的值:
/**
* 获取用户的全名
*
* @return string
*/
public function getFullNameAttribute()
{
return "{$this->first_name} {$this->last_name}";
}
定义修改器
要定义一个修改器,需要在模型中定义 setFooAttribute
方法,其中 Foo
是你想要访问的字段(使用驼峰式命名规则)。接下来让我们为 first_name
属性定义一个修改器,当我们为模型上的 first_name
赋值时该修改器会被自动调用:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* 设置用户的名字
*
* @param string $value
* @return string
*/
public function setFirstNameAttribute($value)
{
$this->attributes['first_name'] = strtolower($value);
}
}
该修改器获取要被设置的属性值,允许你操纵该值并设置 Eloquent 模型内部属性值为操作后的值。例如,如果你尝试设置 Sally
的 first_name
属性:
$user = App\User::find(1);
$user->first_name = 'Sally';
在本例中,setFirstNameAttribute
方法会被调用,传入参数为 Sally
,修改器会对其调用 strtolower
函数并将处理后的值设置为内部属性的值。
链接:http://laravelacademy.org/post/8875.html