[ Laravel 5.2 文档 ] Eloquent ORM -- 访问器&修改器
1、简介
访问器和修改器允许你在获取模型属性或设置其值时格式化Eloquent 属性。例如,你可能想要使用Laravel加密器对存储在数据库中的数据进行加密,并且在 Eloquent 模型中访问时自动进行解密。
除了自定义访问器和修改器,Eloquent 还可以自动转换日期字段为Carbon实例甚至将文本转换为JSON。
2、访问器 & 修改器
定义访问器
要定义一个访问器,需要在模型中创建一个 getFooAttribute方法,其中 Foo是你想要访问的字段名(使用驼峰式命名规则)。在本例中,我们将会为 first_name属性定义一个访问器,该访问器在获取 first_name的值时被 Eloquent 自动调用:
1 |
|
正如你所看到的,该字段的原生值被传递给访问器,然后返回处理过的值。要访问该值只需要简单访问 first_name即可:
1 |
|
定义修改器
要定义一个修改器,需要在模型中定义 setFooAttribute方法,其中 Foo是你想要访问的字段(使用驼峰式命名规则)。接下来让我们为 first_name属性定义一个修改器,当我们为模型上的 first_name赋值时该修改器会被自动调用:
1 |
|
该修改器获取要被设置的属性值,允许你操纵该值并设置 Eloquent 模型内部属性值为操作后的值。例如,如果你尝试设置 Sally的 first_name属性:
1 |
|
在本例中, setFirstNameAttribute方法会被调用,传入参数为 Sally,修改器会对其调用 strtolower函数并将处理后的值设置为内部属性的值。
3、日期修改器
默认情况下,Eloquent 将会转化 created_at和 updated_at列的值为 Carbon 实例,该类继承自 PHP 原生的 Datetime类,并提供了各种有用的方法。
你可以自定义哪些字段被自动调整修改,甚至可以通过重写模型中的 $dates属性完全禁止调整:
1 |
|
如果字段是日期格式时,你可以将其值设置为 UNIX 时间戳,日期字符串( Y-m-d),日期-时间字符串, Datetime/Carbon实例,日期的值将会自动以正确格式存储到数据库中:
1 |
|
正如上面提到的,当获取被罗列在 $dates数组中的属性时,它们会被自动转化为 Carbon实例,允许你在属性上使用任何 Carbon的方法:
1 |
|
默认情况下,时间戳的格式是“Y-m-d H:i:s”,如果你需要自定义时间戳格式,在模型中设置 $dateFormat属性,该属性决定日期属性存储在数据库以及序列化为数组或 JSON 时的格式:
1 |
|
4、属性转换
模型中的 $casts属性为属性字段转换到通用数据类型提供了便利方法 。 $casts属性是数组格式,其键是要被转换的属性名称,其值时你想要转换的类型。目前支持的转换类型包括: integer, real, float, double, string, boolean, object, array, collection, date和 datetime。
例如,让我们转换 is_admin属性,将其由 integer类型(0或1)转换为 boolean类型:
1 |
|
现在, is_admin属性在被访问时总是被转换为 boolean,即使底层存储在数据库中的值是 integer:
1 |
|
数组转换
array类型转换在处理被存储为序列化 JSON 格式的字段时特别有用,例如,如果数据库有一个 TEXT 字段类型包含了序列化JSON,添加 array类型转换到该属性将会在 Eloquent 模型中访问其值时自动将其反序列化为 PHP 数组:
1 |
|
类型转换被定义后,访问 options属性将会自动从 JSON 反序列化为 PHP 数组,反之,当你设置 options属性的值时,给定数组将会自动转化为 JSON 以供存储:
1 |
|

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

长URL(通常用关键字和跟踪参数都混乱)可以阻止访问者。 URL缩短脚本提供了解决方案,创建了简洁的链接,非常适合社交媒体和其他平台。 这些脚本对于单个网站很有价值

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

这是有关用Laravel后端构建React应用程序的系列的第二个也是最后一部分。在该系列的第一部分中,我们使用Laravel为基本的产品上市应用程序创建了一个RESTFUL API。在本教程中,我们将成为开发人员

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

2025年的PHP景观调查调查了当前的PHP发展趋势。 它探讨了框架用法,部署方法和挑战,旨在为开发人员和企业提供见解。 该调查预计现代PHP Versio的增长

在本文中,我们将在Laravel Web框架中探索通知系统。 Laravel中的通知系统使您可以通过不同渠道向用户发送通知。今天,我们将讨论您如何发送通知OV
