前言
Laravel是一个简单优雅的PHP Web开发框架,可以将开发者从意大利面条式的代码中解放出来,通过简单、高雅、表达式语法开发出很棒的Web应用,那下面跟着小编一起来学习laravel中的存取器吧。
Eloquent: 存取器简介
访问器和存储器允许你在获取或者设置 Eloquent 模型属性值时对其进行格式化操作。比如,你可能希望当一个值存储进数据库之前先对其进行 Laravel encrypter 进行加密操作,并且可以在你通过模型访问的时候自动的进行该属性的解密。
除了可自定义的的访问器和存储器,Eloquent 也可以自动的将日期字段转换为 Carbon 实例,或者甚至是将字符串字段转换为 JSON。
访问器 & 存取器
定义一个访问器
为了定义一个访问器,你需要在你的模型上创建一个 getFooAttribute
方法,其中的 Foo
是你需要进行访问的列名的驼峰方式的命名。在这个例子中,我们将定义一个 first_name
属性的访问器。这个访问器会在 Eloquent 尝试获取 first_name
属性值时触发:
<?phpnamespace App;use Illuminate/Database/Eloquent/Model;class User extends Model{ /** * Get the user's first name. * * @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
属性的值时进行调用:
<?phpnamespace App;use Illuminate/Database/Eloquent/Model;class User extends Model{ /** * Set the user's first name. * * @param string $value * @return string */ public function setFirstNameAttribute($value) { $this->attributes['first_name'] = strtolower($value); }}
存储器会接收即将设置到属性中的值,这允许你对这个值进行操作,并将其设置到模型内部的 $attributes
属性中。所以,举个示例,如果我们尝试将 first_name
属性设置为 Sally
:
$user = App/User::find(1);$user->first_name = 'Sally';
在这个例子中,setFirstNameAttribute
方法会被调用并伴随
新闻热点
疑难解答