laravel 模型Model 定义访问器和修改器
访问器和修改器可以让你修改 Eloquent 模型中的属性或者设置它们的值,例如,你可能想要使用 Laravel 加密器 来加密一个被保存在数据库中的值,当你从 Eloquent 模型访问该属性时该值将被自动解密。
除了自定义访问器和修改器之外,Eloquent 也会自动将日期字段类型转换成 Carbon 实例或将 文本字段类型转换成 JSON。
定义一个访问器
若要定义一个访问器,则须在你的模型上创建一个 getFooAttribute 方法。要访问的 Foo 字段需使用「驼峰式」来命名。在这个例子中,我们将为 first_name 属性定义一个访问器。当 Eloquent 尝试获取 first_name 的值时,将会自动调用此访问器:
<?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;
定义一个修改器
若要定义一个修改器,则须在模型上定义一个 setFooAttribute 方法。要访问的 Foo 字段需使用「驼峰式」来命名。让我们再来定义 first_name 属性的修改器。当我们尝试在模型上设置 first_name 的值时,将会自动调用此修改器:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { /** * 设定用户的名字。 * * @param string $value * @return void */ public function setFirstNameAttribute($value) { $this->attributes['first_name'] = strtolower($value); } }
修改器会获取属性已经被设置的值,让你可以操作该值并将其设置到 Eloquent 模型内部的 $attributes 属性上。举个例子,如果我们尝试将 first_name 属性设置成 Sally:
$user = App\User::find(1); $user->first_name = 'Sally';
在这个例子中,setFirstNameAttribute 函数将会使用 Sally 作为参数来调用。修改器会对该名字使用 strtolower 函数并将其值设置于内部的 $attributes 数组。