Model Mutators 模块访问器

文章目录

  • Model Mutators 模块访问器
    • Introduction 介绍
    • Accessors & mutators 存取
      • Defining an accessor 定义访问器
      • Defining a mutator 定义更改器
    • Date mutators 日期变更器
    • Attribute casting 属性转换
      • Array casting 数组转换

Introduction 介绍

访问器和更改器允许您在从模型中检索属性或设置其值时设置其格式。
比如
您可能想使用[加密服务](…/ services / encryption)对值进行加密,以将其存储在数据库中,然后在模型上访问属性时自动对其进行解密。

除了自定义访问器和变量外,您还可以自动将日期字段强制转换为[Carbon](https://github.com/briannesbitt/Carbon)实例,甚至[将文本值转换为JSON](#attribute-casting)。

Accessors & mutators 存取

Defining an accessor 定义访问器

要定义访问器,请在模型上创建一个“ getFooAttribute”方法,其中“ Foo”是您要访问的列的驼峰写法。
在这个例子中,我们将为“ first_name”属性定义一个访问器。尝试检索“ first_name”的值时,访问器将被自动调用:

<?php namespace Acme\Blog\Models;use Model;class User extends Model
{/*** 获取用户的first name** @param  string  $value* @return string*/public function getFirstNameAttribute($value){return ucfirst($value);}
}

如上,该列的原始值被传递给访问器,使您可以操纵并返回该值
要访问访问器的值,您可以简单地访问first_name属性:

$user = User::find(1);$firstName = $user->first_name;

Defining a mutator 定义更改器

要定义一个变量,请在模型上定义一个“ setFooAttribute”方法,其中“ Foo”是您要访问的列的驼峰写法。
在此示例中,让我们为“ first_name”属性定义一个变量。
当我们尝试在模型上设置“ first_name”属性的值时,将自动调用此mutator:

<?php namespace Acme\Blog\Models;use Model;class User extends Model
{/*** set用户的first name.** @param  string  $value* @return string*/public function setFirstNameAttribute($value){$this->attributes['first_name'] = strtolower($value);}
}

mutator将接收将要放到属性上的值
然后操作该值
并在模型上的 $attributes 属性上设置操纵后的值
例如,如果我们尝试将“ first_name”属性设置为“ Sally”:

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

这里的setFirstNameAttribute函数将以值Sally调用。
然后,更改器将对名称应用strtolower函数,并在内部$ attributes数组中设置其值。

Date mutators 日期变更器

默认情况下,October的model会将“created”和“updated”列转换为[Carbon]的实例(https://github.com/briannesbitt/Carbon)对象
它提供了各种有用的方法并扩展了本机PHPDateTime 类。

你可以自定义哪个字段可以被自动变更,甚至通过覆写 $dates 属性来完全禁用此变更

class User extends Model
{/*** The attributes that should be mutated to dates.** @var array*/protected $dates = ['created_at', 'updated_at', 'disabled_at'];
}

当某列被视为日期时,您可以将其值设置为UNIX时间戳,日期字符串(Y-m-d),日期时间字符串,当然还有DateTime /Carbon 实例,日期的值将自动正确存储在数据库中:

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

如上所述,在检索$ dates属性中列出的属性时,它们将自动转换为[Carbon](https://github.com/briannesbitt/Carbon)实例,允许您使用Carbon的任何方法根据您的属性:

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

默认情况下,时间戳记格式为'Y-m-d H:i:s'.如果您需要自定义时间戳格式,请在模型上设置$ dateFormat属性。
此属性确定日期属性在数据库中的存储方式,以及将模型序列化为数组或JSON时的格式:

class Flight extends Model
{/*** 模型的日期列的存储格式。** @var string*/protected $dateFormat = 'U';
}

Attribute casting 属性转换

模型上的$casts 属性提供了一种将属性转换为通用数据类型的便捷方法。
$casts 属性应该是一个数组,其中键是要转换的属性的名称,而值是希望转换为列的类型。
支持的转换类型为:: integer, real, float, double, string, boolean, object and array.

例如,让我们将 is_admin 属性强制转换为布尔值,该属性以整数(0 or 1)的形式存储在我们的数据库中:
For example, let’s cast the is_admin attribute, which is stored in our database as an integer (0 or 1) to a boolean value:

class User extends Model
{/*** The attributes that should be casted to native types.** @var array*/protected $casts = ['is_admin' => 'boolean',];
}

现在,即使将基础值作为整数存储在数据库中,当您访问它时,is_admin属性也将始终转换为布尔值

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

Array casting 数组转换

当处理存储为序列化JSON的列时,array cast类型特别有用。
例如,如果数据库的“TEXT”字段类型包含序列化的JSON,
如果在数据库中添加了一个JSON属性,则当您将该属性反序列化到数据库时,将自动对该属性进行序列化
当您在Eloquent model上访问该属性时,如果向该属性添加“array”转换
将自动将该属性反序列化为PHP数组:

class User extends Model
{/*** The attributes that should be casted to native types.** @var array*/protected $casts = ['options' => 'array',];
}

一旦定义了强制转换,就可以访问“options”属性,它将自动从JSON反序列化到PHP数组中。当您设置“options”属性的值时,给定的数组将自动序列化回JSON以供存储:

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

October cms(数据库-Mutators)相关推荐

  1. 帝国php.ini路径,帝国CMS数据库配置文件是哪个文件?

    帝国CMS数据库配置文件是哪个文件? 来源:WDPHP技术站 时间:2019年01月18日 浏览次数:388次 帝国CMS数据库配置文件e/class/config.php,对于帝国7.0以后的版本, ...

  2. 帝国源码php安装文件是哪个,帝国CMS数据库配置文件是哪个

    帝国CMS数据库配置文件是哪个? 帝国CMS数据库配置文件e/class/config.php,对于帝国7.0以后的版本,数据库路径就是 e/config/config.php 一.变量列表 表单提交 ...

  3. 苹果cms数据.php,苹果cms数据库常用sql语句对照及使用方法

    这篇文章主要为大家详细介绍了苹果cms数据库常用sql语句对照及使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,有需要的朋友可以收藏方便以后借鉴. 苹果cms v10常用sql语句 使用方 ...

  4. php获取今日头条视频地址并插入织梦cms数据库

    每天一篇原创文章,今天更新php获取今日头条视频地址并插入织梦cms数据库.本文由零零下载站(http://www.xxindu.com)原创首发,转载请注明来处. 下面给出代码,有什么问题可以留言, ...

  5. 校园超市,百货超市小程序,手把手带你开发一款微信商城小程序,云开发+cms+数据库+js+css+微信小程序

    从今天开始带领大家实现一款云开发版的校园二手商城小程序 技术选型 1,前端 微信小程序原生框架 css JavaScript 2,管理后台 云开发Cms内容管理系统 web网页 3,数据后台 小程序云 ...

  6. php怎么修改表前缀,教你如何修改帝国cms数据库表前缀?

    自己有个小站用的是帝国cms,因为找人恢复过数据,被人把表前缀改掉成了一个网址,看着别扭的很,于是想把这个数据库表前缀改过来,具体方法如下,本人亲自测试成功,不需要借助其他工具,大家按步骤操作即可: ...

  7. October CMS - 快速入门 1 安装

    项目源码地址:https://gitee.com/494901823/O... 视频:http://www.365yg.com/i6567340... 按照laravel开发环境的要求安装环境,必不可 ...

  8. youdian cms 数据库以及结构

    youdian cms用频道来控制页面层级的归属. 所有的频道都位于youdian_channel表内 每一个频道都有一个频道ID,也有他的父频道.还有haschild表示他是否有子频道. 顶部的导航 ...

  9. 帝国cms数据库php调用tag,帝国CMS列表内容模板调用TAG的两种方法

    方法1. /* 列表页显示tag 开始*/ $tagstr=''; $tsql=$empire->query("select tagid from {$dbtbpre}enewstag ...

  10. 信息收集[架构CMS数据库中间件]

    蓝易云高性能服务器

最新文章

  1. Linux的fork实现原理,【Linux】Fork炸弹详解
  2. 外贸网络推广浅析怎么能更有效地提升网站的收录?
  3. 知识图谱(二)——知识表示
  4. 安全类链接,https
  5. 还在发愁linux命令记不住吗?神器来了!
  6. 正则表达式零宽断言详解
  7. 连接数学和美学的--西奥多罗斯螺旋
  8. 汇编语言的简答入门--斐波那契数列(递归)
  9. python进阶训练营百度网盘_(在线观看)【完结】私域流量实战训练营(百度网盘分享下载)...
  10. 聊聊 | 他在Google Play安全奖励计划贡献榜单上排名第一
  11. 异常检测-基于孤立森林算法Isolation-based Anomaly Detection-1-论文学习
  12. Linux内核开发_2_Initramf
  13. 梳理的关于mongodb的基础使用命令:----查询记录点--推荐使用:
  14. 东北大学linux程序设计考试,Linux认证考试试题及答案
  15. 【极客】神器——常用的一些小工具
  16. Python数据分析报告
  17. linux lefse分析,科学网-linux本地化进行lefse分析-林国鹏的博文
  18. win xp出现“安装程序包的语言不受支持”的解决
  19. Java程序员开发两年月薪15k和30K的程序员差距在哪里?
  20. python爬虫 爬取淘宝搜索页面商品信息数据

热门文章

  1. 访问服务器硬盘速度慢,硬盘读取速度变慢 当前传输模式pio的解决方法
  2. 听说看了这篇文章就彻底搞懂了什么是OPC(上)
  3. 华裔计算机科学家晟,微软亚洲研究院发表了超过5000篇科研论文:晟最受赞许的企业研究院...
  4. python在线编辑器可视化_海龟编辑器(Python编辑器)
  5. 计算机应用基础—多媒体技术(二)
  6. img标签,图片占位
  7. 线性独立成分分析(ICA)与鸡尾酒会问题
  8. JS之获取银行卡信息
  9. 测试固态硬盘写入数据软件,持续写入100TB 三星840EVO耐久度测试
  10. Windows系统鼠标右键菜单添加打开cmd终端