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