# 属性操作
### 介绍
访问器和更改器允许您在从模型中检索属性或设置其值时设置其格式。例如,您可能希望使用[加密服务](https://octobercms.com/docs/services/encryption)对存储在数据库中的值进行加密,然后在模型上访问属性时自动对其进行解密。
除了自定义访问器和变量外,您还可以自动将日期字段强制转换为[Carbon](https://github.com/briannesbitt/Carbon)实例,甚至[将文本值强制转换为JSON](https://octobercms.com/docs/database/mutators#attribute-casting)。
### [](https://octobercms.com/docs/database/mutators#accessors-and-mutators)存取器和更改器
#### 定义访问器
要定义访问器,请`getFooAttribute`在模型上创建一个方法,其中`Foo`是您要访问的列的“ camel”大小写名称。在此示例中,我们将为`first_name`属性定义一个访问器。尝试检索以下值时,将自动调用访问器`first_name`:
~~~
<?php namespace Acme\Blog\Models;
use Model;
class User extends Model
{
/**
* Get the user's first name.
*
* @param string $value
* @return string
*/
public function getFirstNameAttribute($value)
{
return ucfirst($value);
}
}
~~~
如您所见,该列的原始值被传递给访问器,使您可以操纵并返回该值。要访问访问器的值,您可以简单地访问`first_name`属性:
~~~
$user = User::find(1);
$firstName = $user->first_name;
~~~
#### 定义增幅器
要定义变量,请`setFooAttribute`在模型上定义一个方法,其中`Foo`要访问的列的“ camel”大小写名称是。在此示例中,让我们为`first_name`属性定义一个变量。当我们尝试`first_name`在模型上设置属性值时,将自动调用此mutator:
~~~
<?php namespace Acme\Blog\Models;
use Model;
class User extends Model
{
/**
* Set the user's first name.
*
* @param string $value
* @return string
*/
public function setFirstNameAttribute($value)
{
$this->attributes['first_name'] = strtolower($value);
}
}
~~~
增变器将接收在属性上设置的值,从而允许您操纵该值并在模型的内部`$attributes`属性上设置操纵的值。例如,如果我们尝试将`first_name`属性设置为`Sally`:
~~~
$user = User::find(1);
$user->first_name = 'Sally';
~~~
此处`setFirstNameAttribute`将使用value调用该函数`Sally`。然后,`strtolower`更改器会将函数应用于名称,并在内部`$attributes`数组中设置其值。
### [](https://octobercms.com/docs/database/mutators#date-mutators)日期变量
默认情况下,十月份的Models会将`created_at`and`updated_at`列转换为[Carbon](https://github.com/briannesbitt/Carbon)对象的实例,该对象提供了各种有用的方法并扩展了本机PHP`DateTime`类。
您可以通过覆盖`$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
{
/**
* The storage format of the model's date columns.
*
* @var string
*/
protected $dateFormat = 'U';
}
~~~
### [](https://octobercms.com/docs/database/mutators#attribute-casting)属性转换
`$casts`模型上的属性提供了一种将属性转换为通用数据类型的便捷方法。该`$casts`属性应该是一个数组,其中键是要转换的属性的名称,而值是希望转换为列的类型。支持的铸件类型有:`integer`,`real`,`float`,`double`,`string`,`boolean`,`object`和`array`。
例如,让我们将`is_admin`属性转换为布尔值,该属性以整数(`0`或`1`)的形式存储在数据库中:
~~~
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`当使用存储为序列化JSON的列时,强制类型转换特别有用。例如,如果您的数据库具有`TEXT`包含序列化JSON的字段类型,`array`则在Eloquent模型上访问该属性时,将强制类型转换添加到该属性将自动将该属性反序列化为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 安装
- 后台控制器路径
- 图标
- 获取安装网上的插件/主题
- 插件构造器使用
- 定时任务
- October后台控制器
- vscode编辑器
- ajax操作
- 使用
- ajax更新组件
- ajax属性API
- JavaScript API
- ajax综合使用
- 主题
- 多语言主题
- 安装市场主题
- 主题程序处理
- 主题
- 页面
- 部件
- 布局
- 内容
- 组件
- 媒体
- 主题表单操作
- 表单使用
- 表单后端程序处理
- 插件
- 自定义插件
- 插件说明
- 插件导航条
- 插件数据库设置
- 插件的设置管理
- 插件的配置文件config
- 组件
- app服务
- app容器
- 扩展行为
- 缓存
- Collection类
- Lazy Collections
- Collection方法
- 助手函数
- 数组助手函数
- 路径助手函数
- 玄乐助手函数
- 其他助手函数
- 错误与记录
- 事件处理
- HTML页面
- 文件与目录操作
- 散列和加密
- 邮件
- 邮件内容
- 邮件发送
- 分页
- 模板解析器
- 动态解析器语法
- 队列消息
- 请求与输入
- 响应
- 视图
- 路由器
- 配置
- 验证操作
- 处理错误消息
- 错误消息与视图
- 可用的验证规则
- 有条件的验证规则
- 验证数组
- 错误消息
- 自定义验证规则
- 模型操作
- 定义模型与其属性
- 检索模型
- 插入与更新
- 删除模型
- 查询范围
- 事件操作
- 关联操作
- 定义关系
- 关系类型
- 多肽关系
- 关系查询
- 渴望加载
- 插入模型
- 数据库操作
- 基本用法
- 数据表结构
- 查询连贯操作
- 结果检索
- select子句
- 插入更新
- where子句
- 排序,分组,限制和偏移
- 文件附件
- Collection操作
- 属性操作
- 系列化json
- 数据库属性
- 数据库行为
- 控制器
- 后台控制器定义
- 后台页面
- 后台组件
- 后台表单
- 表单组件
- 表单视图
- 表单行为
- 后台列表
- 列表行为
- 列表过滤器
- 可用列类型
- 关系行为
- 关系行为类型
- 扩展关系行为
- 列表排序操作
- 导入导出操作
- 用于与权限
- corlate模板修改
- 修改顶部导航
- laravel问题
- 控制器不存在
- 控制器
- 路由组
- laravel笔记
- laravel 安装
- 伪静态配置
- 依赖注入 & 控制器
- 中间件
- 路由文件
- 视图