# 屬性操作
### 介紹
訪問器和更改器允許您在從模型中檢索屬性或設置其值時設置其格式。例如,您可能希望使用[加密服務](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 安裝
- 偽靜態配置
- 依賴注入 & 控制器
- 中間件
- 路由文件
- 視圖