#### 1. 獲取器簡介 --- 獲取器的作用是對模型實例的(原始)數(shù)據(jù)做出自動處理 一個獲取器對應模型的一個特殊方法(該方法必須為public類型),而且必須遵循框架的獲取器方法名命名規(guī)范 #### 2. 獲取器方法名命名規(guī)范 --- 獲取器方法命名規(guī)范: **get`FieldName`Attr**, `FieldName` 為數(shù)據(jù)表字段的大駝峰轉(zhuǎn)換 **一、小寫字母下劃線分隔命名的字段** 對于一般的數(shù)據(jù)表字段,字段名由多個單詞組成時,規(guī)范是使用小寫字母下劃線分隔命名,例如: `user_name` 字段 這種字段,對應的獲取器方法為 `getUserNameAttr`。補充: name 字段對應 **getNameAttr** 這就不過多介紹了 **二、帶有大寫字母的字段** 在特定情況下,數(shù)據(jù)表字段可能使用的字段可能是大寫,比如微信小程序中的用戶昵稱字段: **nickName** 此時獲取器方法可以定義為: `getNickNameAttr` #### 3. 追加獲取器 --- **什么是追加獲取器** 追加獲取器: 數(shù)據(jù)表中不存在的字段對應的獲取器方法 獲取器不僅能定義數(shù)據(jù)表中存在的字段,還可以定義數(shù)據(jù)表中不存在的字段,這種獲取器稱之為 **追加獲取器** **獲取器方法參數(shù)個數(shù)** 獲取器的第一個參數(shù)傳入的是當前字段對應的數(shù)據(jù) 獲取器的第二個參數(shù)傳入的是當前的所有原始數(shù)據(jù)數(shù)組 一般來說,普通的獲取器方法用不到第二個參數(shù),所以定義一個參數(shù)就可以了 對于追加獲取器方法,方法第一個參數(shù)肯定是 null,因為數(shù)據(jù)表中沒有該字段,所以必須定義兩個參數(shù) **調(diào)用追加獲取器** 追加獲取器不會自動調(diào)用,因為追加獲取器不是數(shù)據(jù)表中存在的字段,需要使用模型輸出 `append()` 來調(diào)用追加獲取器 #### 4. 獲取器的應用場景 --- **一、狀態(tài)值轉(zhuǎn)為中文名稱** 場景: 商品表有個status字段,0 代表下架 1 代表上架 在商品表模型中定義 status 字段的獲取器,使用模型查詢數(shù)據(jù)時,status 字段值則自動轉(zhuǎn)為中文名稱 ![](https://img.itqaq.com/art/content/ae1ab48055678332f8594e5f5c502407.png) 但是,實際開發(fā)中我建議使用追加獲取器 因為難免會在其他地方需要用到 status 字段的原始值,即便可以使用 **$model->getData()** 獲取原始數(shù)據(jù) ![](https://img.itqaq.com/art/content/4ca551d6d34a4e4a43eeda18612a1a4a.png) **二、時間日期字段的格式化輸出** 用戶表 expire_time 字段為會員到期時間,存儲的是PHP時間戳,此時可以定義獲取器,將時間戳自動轉(zhuǎn)為日期時間格式 ![](https://img.itqaq.com/art/content/3e1497b6f8c1b6a1f979639d16ac17e9.png) **三、組合字段的輸出** 活動表 level 字段代表獎品等級,name 是獎品名稱,可通過追加獲取器組合輸出: **一等獎: 麻辣香鍋** ![](https://img.itqaq.com/art/content/d130af68264efef02ac51cedc82df1a5.png)