Laravel模型访问器和修改器_Laravel Accessor和Mutator用法
发布时间 - 2025-11-26 00:00:00 点击率:次访问器用于格式化读取的属性值,修改器用于预处理写入的属性值。例如,通过getNameAttribute使name首字母大写,setEmailAttribute将email转为小写存储,实现数据展示与输入的灵活控制。
Laravel 的访问器(Accessor)和修改器(Mutator)是 Eloquent 模型中非常实用的功能,允许你在获取或设置模型属性时对其进行格式化或处理。它们能让你在不改变数据库存储方式的前提下,灵活控制数据的展示与输入。
什么是访问器(Accessor)
访问器用于在从数据库获取属性值时,对这个值进行格式化处理后再返回给调用方。比如将数据库中的时间戳转换为可读日期、将首字母大写等。
定义访问器的方法是:在模型中创建一个以 get{AttributeName}Attribute 命名的方法,其中 {AttributeName} 是你想处理的字段名,采用驼峰命名法。
示例:定义一个访问器,将 name 字段的值转为首字母大写
class User extends Model
{
public function getNameAttribute($value)
{
return ucfirst($value);
}
}
当你访问 $user->name 时,Laravel 会自动调用这个访问器,并返回处理后的值。
示例:将 created_at 格式化为“Y-m-d H:i”格式
public function getCreatedAtAttribute($value)
{
return date('Y-m-d H:i', strtotime($value));
}
什么是修改器(Mutator)
修改器用于在将数据存入数据库之前,对属性值进行预处理。比如加密密码、统一字符串大小写、格式化日期等。
定义修改器的方法是:创建一个以 set{AttributeName}Attribute 命名的方法,参数是你传入的原始值。
示例:在保存前将 email 转为小写
class User extends Model
{
public function setEmailAttribute($value)
{
$this->attributes['email'] = strtolower($value);
}
}
示例:保存前对密码进行哈希加密
public function setPasswordAttribute($value)
{
$this->attributes['password'] = bcrypt($value);
}
这样每次设置 password 属性时,都会自动加密存储,无需在控制器中手动处理。
使用场景建议
- 敏感数据处理:如密码、身份证号的加密或脱敏显示
- 格式统一:如手机号、邮箱标准化存储
- 时间处理:将字符串自动转为 Carbon 实例,或格式化输出
- 组合字段:通过访问器拼接多个字段,如获取 full_name = first_name + last_name
public function getFullNameAttribute()
{
return $this->first_name . ' '
. $this->last_name;
}
调用 $user->full_name 即可获取拼接结果。
注意事项
访问器和修改器只对通过 Eloquent 模型操作的数据生效。如果使用 DB 类直接操作数据库,这些方法不会被触发。
属性名遵循驼峰命名,在 URL 或数组中传递时应使用下划线命名(如 user_name),Laravel 会自动转换。
如果你在访问器中使用了不存在的属性,要确保该字段在模型的 $fillable 或 $guarded 中合理配置,避免被过滤。
基本上就这些。掌握 Accessor 和 Mutator 能让你的模型更智能,代码更整洁。
# laravel
# word
# access
# ai
# 邮箱
# 敏感数据
# 格式化输出
# 修改器
# carbon
# 字符串
# Attribute
# 访问器
# 数据库
# 你在
# 首字母
# 能让
# 创建一个
# 器中
# 多个
# 当你
# 下划线
# 你想
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么为数据库表字段添加索引以优化查询
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
英语简历制作免费网站推荐,如何将简历翻译成英文?
如何在云主机快速搭建网站站点?
Laravel如何创建自定义Artisan命令?(代码示例)
如何续费美橙建站之星域名及服务?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
JavaScript常见的五种数组去重的方式
如何在万网利用已有域名快速建站?
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
,在苏州找工作,上哪个网站比较好?
Laravel如何处理异常和错误?(Handler示例)
原生JS获取元素集合的子元素宽度实例
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
Linux网络带宽限制_tc配置实践解析【教程】
使用豆包 AI 辅助进行简单网页 HTML 结构设计
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
海南网站制作公司有哪些,海口网是哪家的?
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
Laravel怎么使用Intervention Image库处理图片上传和缩放
如何彻底卸载建站之星软件?
IOS倒计时设置UIButton标题title的抖动问题
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】
Laravel如何集成Inertia.js与Vue/React?(安装配置)
网站制作报价单模板图片,小松挖机官方网站报价?
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
Laravel如何为API编写文档_Laravel API文档生成与维护方法
jQuery validate插件功能与用法详解
用yum安装MySQLdb模块的步骤方法
如何用低价快速搭建高质量网站?
大型企业网站制作流程,做网站需要注册公司吗?
Angular 表单中正确绑定输入值以确保提交与验证正常工作
如何在万网ECS上快速搭建专属网站?
Linux系统运维自动化项目教程_Ansible批量管理实战
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
零基础网站服务器架设实战:轻量应用与域名解析配置指南
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
C++时间戳转换成日期时间的步骤和示例代码
JavaScript如何实现倒计时_时间函数如何精确控制
简单实现Android文件上传
Laravel如何使用Blade模板引擎?(完整语法和示例)
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
利用 Google AI 进行 YouTube 视频 SEO 描述优化


. $this->last_name;
}