1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > [ Laravel 5.2 文档 ] Eloquent ORM — 访问器&修改器

[ Laravel 5.2 文档 ] Eloquent ORM — 访问器&修改器

时间:2024-01-24 06:09:04

相关推荐

[ Laravel 5.2 文档 ] Eloquent ORM — 访问器&修改器

后端开发|php教程

[ Laravel 5.2 文档 ] Eloquent ORM — 访问器&修改器

后端开发-php教程

ios仿QQ源码,vscode写的代码没颜色,ubuntu ptpd命令,tomcat如何改日志,飞行的爬虫,php控制层,滁州关键词seo优化公司,网站批量注册软件lzw

1、简介

访问器和修改器允许你在获取模型属性或设置其值时格式化Eloquent 属性。例如,你可能想要使用Laravel加密器对存储在数据库中的数据进行加密,并且在 Eloquent 模型中访问时自动进行解密。

任务分配系统源码,vscode学前端插件,ubuntu无法进入图形界面,tomcat启动无法访问,sqlite存储文件,网页设计工作室首页,织梦cms 数据库配置,bgp服务器租用价格,jquery 选择插件,现在主流的前端框架,网络爬虫赚钱,php 模糊查询,外贸建站seo,springboot 验证,网站推广中h1标签的重要性,html5手机论坛网站模板,vs网页制作教程,主页面模板,网页后台维护,页面向导功能实现,视频cms管理系统,小程序代码下载lzw

除了自定义访问器和修改器,Eloquent 还可以自动转换日期字段为Carbon实例甚至将文本转换为JSON。

网址导航分类系统源码,预装ubuntu需要授权,tomcat 只能在局域网,多台机器 爬虫,如何去除数组唯一php,余姚seo排名lzw

2、访问器 & 修改器

定义访问器

要定义一个访问器,需要在模型中创建一个 getFooAttribute方法,其中 Foo是你想要访问的字段名(使用驼峰式命名规则)。在本例中,我们将会为 first_name属性定义一个访问器,该访问器在获取 first_name的值时被 Eloquent 自动调用:

<?phpnamespace 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赋值时该修改器会被自动调用:

attributes[first_name] = strtolower($value); }}

该修改器获取要被设置的属性值,允许你操纵该值并设置 Eloquent 模型内部属性值为操作后的值。例如,如果你尝试设置 Sally的 first_name属性:

$user = App\User::find(1);$user->first_name = Sally;

在本例中, setFirstNameAttribute方法会被调用,传入参数为 Sally,修改器会对其调用 strtolower函数并将处理后的值设置为内部属性的值。

3、日期修改器

默认情况下,Eloquent 将会转化 created_at和 updated_at列的值为 Carbon 实例,该类继承自 PHP 原生的 Datetime类,并提供了各种有用的方法。

你可以自定义哪些字段被自动调整修改,甚至可以通过重写模型中的 $dates属性完全禁止调整:

<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class User extends Model{ /*** 应该被调整为日期的属性** @var array*/ protected $dates = [created_at, updated_at, disabled_at];}

如果字段是日期格式时,你可以将其值设置为 UNIX 时间戳,日期字符串( Y-m-d),日期-时间字符串, Datetime/Carbon实例,日期的值将会自动以正确格式存储到数据库中:

$user = App\User::find(1);$user->disabled_at = Carbon::now();$user->save();

正如上面提到的,当获取被罗列在 $dates数组中的属性时,它们会被自动转化为 Carbon实例,允许你在属性上使用任何 Carbon的方法:

$user = App\User::find(1);return $user->disabled_at->getTimestamp();

默认情况下,时间戳的格式是“Y-m-d H:i:s”,如果你需要自定义时间戳格式,在模型中设置 $dateFormat属性,该属性决定日期属性存储在数据库以及序列化为数组或 JSON 时的格式:

<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Flight extends Model{ /*** 模型日期的存储格式** @var string*/ protected $dateFormat = U;}

4、属性转换

模型中的 $casts属性为属性字段转换到通用数据类型提供了便利方法 。 $casts属性是数组格式,其键是要被转换的属性名称,其值时你想要转换的类型。目前支持的转换类型包括: integer, real, float, double, string, boolean, object, array, collection, date和 datetime。

例如,让我们转换 is_admin属性,将其由 integer类型(0或1)转换为 boolean类型:

oolean, ];}

现在, is_admin属性在被访问时总是被转换为 boolean,即使底层存储在数据库中的值是 integer:

$user = App\User::find(1);if ($user->is_admin) { //}

数组转换

array类型转换在处理被存储为序列化 JSON 格式的字段时特别有用,例如,如果数据库有一个 TEXT 字段类型包含了序列化JSON,添加 array类型转换到该属性将会在 Eloquent 模型中访问其值时自动将其反序列化为 PHP 数组:

array, ];}

类型转换被定义后,访问 options属性将会自动从 JSON 反序列化为 PHP 数组,反之,当你设置 options属性的值时,给定数组将会自动转化为 JSON 以供存储:

$user = App\User::find(1);$options = $user->options;$options[key] = value;$user->options = $options;$user->save();

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。