目录
2。突变器:保存之前修改属性
3。使用日期(自动铸造)
4。属性可见性和附加自定义访问者
要记住的要点
现实世界中的用例
首页 php框架 Laravel 如何在Laravel雄辩中使用访问者和突变器?

如何在Laravel雄辩中使用访问者和突变器?

Aug 02, 2025 am 08:32 AM
laravel eloquent

Laravel雄辩的ORM中的登录器和突变器可让您在检索或设置值时格式化或操纵模型属性。 1。使用登录器自定义属性检索,例如通过getfirstnameattribute($ value)返回ucfirst($ value)来大写first_name。 2。在保存之前使用突变器修改数据,例如通过设置$ this->属性['password'] = bcrypt($ value),例如SetPasswordattribute($ value)中的哈希密码($ value)。 3。对于日期,Laravel会自动将属性属于$ dates或$ casts,但是可以使用访问者使用自定义格式,尽管必须注意保持碳实例福利。 4。要在数组或JSON输出中包含诸如Full_name之类的计算属性,请将它们添加到$附录属性中。关键点包括使用Stutlycase方法名称,确保简单且可预测的转换以及将逻辑保留在模型中。现实世界中的使用包括哈希敏感数据,格式化电话号码,序列化JSON字段以及将诸如美分之类的单位转换为美元,以确保清洁和可维护的代码。

如何在Laravel雄辩中使用访问者和突变器?

在Laravel的雄辩ORM中,辅助和突变器允许您在获得或设置其值时格式化或操纵模型属性。它们对于格式化日期,哈希密码或从数据库中存储或检索数据之前有用。

如何在Laravel雄辩中使用访问者和突变器?

这是正确使用它们的方法:


1。登录:检索时自定义属性

从模型中检索属性时,请使用访问器格式化或修改属性。

如何在Laravel雄辩中使用访问者和突变器?

示例:格式化一个始终大写的first_name列。

 //在您的模型中(例如,user.php)
使用Illuminate \ Database \ Eloquent \ Model;

班级用户扩展模型
{
    //'first_name'属性的登录器
    公共功能getfirstnameattribute($ value)
    {
        返回ucfirst($ value);
    }
}

现在,当您访问$user->first_name时,laravel将自动将ucfirst()函数应用于存储的值。

如何在Laravel雄辩中使用访问者和突变器?

✅注意:方法名称遵循使用Studlycase的get{Attribute}Attribute格式。

您还可以结合属性:

公共功能getfullnameatTribute()
{
    返回$ this-> first_name。 ''。 $ this-> last_name;
}

然后使用它:

 echo $ user-> full_name; //例如,“约翰·杜”

2。突变器:保存之前修改属性

突变器可让您在将数据保存到数据库之前格式化或转换数据。

示例:保存之前自动哈希密码。

 //在您的用户模型中
公共功能setPasswordattribute($ value)
{
    $ this->属性['password'] = bcrypt($ value);
}

现在,每当您设置password属性时:

 $ user = new user();
$ user-> password ='Secret'; //自动哈希
$ user-> save();

另一个示例:以特定格式存储日期。

公共功能setbirthdateattribute($ value)
{
    $ this->属性['breath_date'] = \ carbon \ carbon :: parse($ value) - >格式('ym-d');
}

3。使用日期(自动铸造)

Laravel会自动处理$dates数组中属性或使用$casts的属性。

受保护的$ dates = ['create_at','updated_at','deleted_at'];

$casts

受保护的$ casts = [
    '激活'=>'布尔值',
    'meta'=>'数组',
];

对于自定义日期格式,您仍然可以使用访问者:

公共功能getCreateatAtattribute($ value)
{
    返回\ carbon \ carbon :: parse($ value) - >格式('m d,y');
}

⚠️在覆盖内置日期访问器时要谨慎 - 除非您返回,否则您可能会失去碳实例的好处。


4。属性可见性和附加自定义访问者

如果您创建一个计算出的访问者(例如full_name ,则默认情况下将其包含在JSON/ARRAY输出中。使用$appends属性包括:

保护$ appends = ['full_name'];

现在,当您将模型转换为数组或JSON时, full_name将出现。


要记住的要点

  • 方法命名至关重要:
    • 访问者: get{AttributeName}Attribute($value)
    • 突变器: set{AttributeName}Attribute($value)
  • 使用StutlyCase作为属性名称(例如, first_nameFirstName
  • 访问$model->attribute时运行的登录器
  • 分配$model->attribute = $value时,突变器运行
  • 计算的字段需要$appends以在输出中显示
  • 避免副作用 - 使转换保持简单和可预测

现实世界中的用例

  • 保存上的哈希API键或密码
  • 格式化电话号码或get/set上的电子邮件
  • 序列化/值得注意的JSON字段
  • 转换单位(例如,美元为美元)
  • 资本化名称或标题

基本上,访问器和突变器可为您提供对模型数据的细粒度控制,而无需使控制器混乱。他们将逻辑保留在模型中的位置。

以上是如何在Laravel雄辩中使用访问者和突变器?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Laravel 教程
1605
29
PHP教程
1511
276
如何在Laravel中实施推荐系统? 如何在Laravel中实施推荐系统? Aug 02, 2025 am 06:55 AM

创建referrals表记录推荐关系,包含推荐人、被推荐人、推荐码及使用时间;2.在User模型中定义belongsToMany和hasMany关系以管理推荐数据;3.用户注册时生成唯一推荐码(可通过模型事件实现);4.注册时通过查询参数捕获推荐码,验证后建立推荐关系并防止自荐;5.当被推荐用户完成指定行为(如下单)时触发奖励机制;6.生成可分享的推荐链接,可使用Laravel签名URL增强安全性;7.在仪表板展示推荐统计信息,如总推荐数和已转化数;必须确保数据库约束、会话或Cookie持久化、

如何运行Laravel项目? 如何运行Laravel项目? Jul 28, 2025 am 04:28 AM

checkphp> = 8.1,作曲家和韦伯佛; 2.cleteproeateprojectandruncomposerinstall; 3.copy.env.exampleto.envandrunphpartisankey :生成; 4.setDatabasecredentialsin.envandrunphpartisanmigrate-seed; 5.StartServerServerWithPhpartisanServe; 6.optionallyrunnnpmins

如何在Laravel中播种数据库? 如何在Laravel中播种数据库? Jul 28, 2025 am 04:23 AM

创建seeder文件:使用phpartisanmake:seederUserSeeder生成seeder类,并在run方法中通过模型工厂或数据库查询插入数据;2.在DatabaseSeeder中调用其他seeder:通过$this->call()按顺序注册UserSeeder、PostSeeder等,确保依赖关系正确;3.运行seeder:执行phpartisandb:seed运行所有注册的seeder,或使用phpartisanmigrate:fresh--seed重置并重新填充数据;4

如何在Laravel应用中实现功能标志? 如何在Laravel应用中实现功能标志? Jul 30, 2025 am 01:45 AM

Chooseafeatureflagstrategysuchasconfig-based,database-driven,orthird-partytoolslikeFlagsmith.2.Setupadatabase-drivensystembycreatingamigrationforafeature_flagstablewithname,enabled,andrulesfields,thenrunthemigration.3.CreateaFeatureFlagmodelwithfilla

如何使用Laravel构建REST API? 如何使用Laravel构建REST API? Jul 30, 2025 am 03:41 AM

创建新Laravel项目并启动服务;2.生成模型、迁移和控制器并运行迁移;3.在routes/api.php中定义RESTful路由;4.在PostController中实现增删改查方法并返回JSON响应;5.使用Postman或curl测试API功能;6.可选地通过Sanctum添加API认证;最终得到一个结构清晰、功能完整且可扩展的LaravelRESTAPI,适用于实际应用。

拉拉维尔(Laravel)中有什么雄辩的ORM? 拉拉维尔(Laravel)中有什么雄辩的ORM? Jul 29, 2025 am 03:50 AM

EloquentORM是Laravel的内置对象关系映射系统,它通过PHP语法而非原生SQL操作数据库,使代码更简洁易维护;1.每个数据表对应一个模型类,每条记录作为模型实例存在;2.采用主动记录模式,模型实例可自行保存或更新;3.支持批量赋值,需在模型中定义$fillable属性以确保安全;4.提供强大的关系支持,如一对一、一对多、多对多等,通过方法调用即可访问关联数据;5.集成查询构造器,可链式调用where、orderBy等方法构建查询;6.支持访问器和修改器,可在获取或设置属性时格式化数

Laravel的存储库合同是什么? Laravel的存储库合同是什么? Aug 03, 2025 am 12:10 AM

Repository模式是一种设计模式,用于解耦业务逻辑与数据访问逻辑。1.它通过接口(Contract)定义数据访问方法;2.具体操作由Repository类实现;3.控制器通过依赖注入使用接口,不直接接触数据源;4.优势包括代码整洁、可测试性强、便于维护和团队协作;5.适用于中大型项目,小型项目可直接使用模型。

使用在Laravel中验证的表单请求。 使用在Laravel中验证的表单请求。 Jul 30, 2025 am 05:04 AM

使用FormRequests可以将复杂的表单验证逻辑从控制器中抽离,提高代码可维护性和复用性。1.创建方式:通过Artisan命令make:request生成请求类;2.定义规则:在rules()方法中设置字段验证逻辑;3.控制器使用:直接以该类作为参数接收请求,Laravel自动验证;4.授权判断:通过authorize()方法控制用户权限;5.动态调整规则:根据请求内容动态返回不同验证规则。

See all articles