獲取數(shù)據(jù)追加字段
1. 前言
前面小節(jié)介紹了數(shù)據(jù)庫操作,本小節(jié)介紹如何在數(shù)據(jù)模型中指定追加字段,追加字段的目的主要是用于對某些字段的特殊處理或需要在返回數(shù)據(jù)的時候返回某些特性情況的字段,這樣的處理對接口的使用者來說更加友好,對于開發(fā)者來說可以減少代碼量和工作量。
2. 應用場景
下面返回的數(shù)據(jù)可以看到創(chuàng)建時間字段 created_at
是時間戳,這種就需要轉(zhuǎn)化成可讀的日期格式,這個時候就可以用到 ThinkPHP
提供的數(shù)據(jù)模型的字段追加功能,它可以在原有字段的基礎上追加出想要的其他字段數(shù)據(jù)。之前獲取學生列表接口的時候返回數(shù)據(jù)如下:
{
"total": 200,
"per_page": 10,
"current_page": 2,
"last_page": 20,
"data": [
{
"id": 12,
"name": "孫空",
"age": 20,
"id_number": "420117201005127996",
"created_at": 1603617951,
"update_at": 0,
"status": 1
},
{
"id": 1,
"name": "趙四",
"age": 24,
"id_number": "420117201005124146",
"created_at": 1603617951,
"update_at": 0,
"status": 1
},
{
"id": 10,
"name": "孫空",
"age": 21,
"id_number": "420117201005124671",
"created_at": 1603617951,
"update_at": 0,
"status": 1
},
{
"id": 9,
"name": "錢學",
"age": 19,
"id_number": "420117201005121149",
"created_at": 1603617951,
"update_at": 0,
"status": 1
},
{
"id": 8,
"name": "吳小明",
"age": 21,
"id_number": "420117201005123197",
"created_at": 1603617951,
"update_at": 0,
"status": 1
},
{
"id": 7,
"name": "張紅",
"age": 19,
"id_number": "420117201005123721",
"created_at": 1603617951,
"update_at": 0,
"status": 1
},
{
"id": 6,
"name": "王五",
"age": 25,
"id_number": "420117201005123617",
"created_at": 1603617951,
"update_at": 0,
"status": 1
},
{
"id": 5,
"name": "錢學",
"age": 23,
"id_number": "420117201005123085",
"created_at": 1603617951,
"update_at": 0,
"status": 1
},
{
"id": 4,
"name": "趙四",
"age": 20,
"id_number": "420117201005128637",
"created_at": 1603617951,
"update_at": 0,
"status": 1
},
{
"id": 3,
"name": "趙四",
"age": 18,
"id_number": "420117201005125711",
"created_at": 1603617951,
"update_at": 0,
"status": 1
}
]
}
3. 設置追加字段
這里還是以之前第 10
小節(jié)學生列表為例,可以在 app\Models\Study\StudentModel
中增加屬性 $append
,然后想要追加什么字段可以初始化 $append
,如下圖所示:
此時再去請求之前的分頁列表接口,會出現(xiàn)如下 created_at_text
字段,因為沒有處理該值,所以顯示的是 null
:
{
"total": 400,
"per_page": 15,
"current_page": 1,
"last_page": 27,
"data": [
{
"id": 205,
"name": "吳小明",
"age": 21,
"id_number": "420117201005129466",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": null
},
{
"id": 212,
"name": "孫空",
"age": 18,
"id_number": "420117201005127426",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": null
},
{
"id": 208,
"name": "張紅",
"age": 22,
"id_number": "420117201005126184",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": null
},
{
"id": 206,
"name": "王五",
"age": 21,
"id_number": "420117201005124940",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": null
},
{
"id": 215,
"name": "趙四",
"age": 20,
"id_number": "420117201005122353",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": null
},
{
"id": 213,
"name": "張紅",
"age": 20,
"id_number": "420117201005126460",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": null
},
{
"id": 204,
"name": "吳小明",
"age": 19,
"id_number": "420117201005124822",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": null
},
{
"id": 209,
"name": "李珍",
"age": 19,
"id_number": "420117201005122985",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": null
},
{
"id": 207,
"name": "錢學",
"age": 24,
"id_number": "420117201005123220",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": null
},
{
"id": 203,
"name": "孫空",
"age": 19,
"id_number": "420117201005129634",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": null
},
{
"id": 211,
"name": "張紅",
"age": 22,
"id_number": "420117201005129909",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": null
},
{
"id": 400,
"name": "孫空",
"age": 23,
"id_number": "420117201005129673",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": null
},
{
"id": 214,
"name": "王五",
"age": 20,
"id_number": "420117201005126275",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": null
},
{
"id": 210,
"name": "錢學",
"age": 18,
"id_number": "420117201005125767",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": null
},
{
"id": 202,
"name": "李珍",
"age": 20,
"id_number": "420117201005125731",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": null
}
]
}
如下圖所示:
4.定義追加字段賦值方法
可以在 StudentModel
中創(chuàng)建如下方法處理追加字段值:
public function getCreatedAtTextAttr()
{
return date('Y-m-d H:i',$this->created_at);
}
如下圖所示:
Tips: 追加字段處理的方法命名格式為
getAaaBbbAttr()
這種格式,其中AaaBbb
是追加字段按照大駝峰命名書寫的。
5. 請求數(shù)據(jù)查看
在 postman
請求學生列表接口,可以查看到數(shù)據(jù)中已有可讀的 created_at_text
字段:
{
"total": 400,
"per_page": 15,
"current_page": 1,
"last_page": 27,
"data": [
{
"id": 205,
"name": "吳小明",
"age": 21,
"id_number": "420117201005129466",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": "2020-11-14 00:58"
},
{
"id": 212,
"name": "孫空",
"age": 18,
"id_number": "420117201005127426",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": "2020-11-14 00:58"
},
{
"id": 208,
"name": "張紅",
"age": 22,
"id_number": "420117201005126184",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": "2020-11-14 00:58"
},
{
"id": 206,
"name": "王五",
"age": 21,
"id_number": "420117201005124940",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": "2020-11-14 00:58"
},
{
"id": 215,
"name": "趙四",
"age": 20,
"id_number": "420117201005122353",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": "2020-11-14 00:58"
},
{
"id": 213,
"name": "張紅",
"age": 20,
"id_number": "420117201005126460",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": "2020-11-14 00:58"
},
{
"id": 204,
"name": "吳小明",
"age": 19,
"id_number": "420117201005124822",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": "2020-11-14 00:58"
},
{
"id": 209,
"name": "李珍",
"age": 19,
"id_number": "420117201005122985",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": "2020-11-14 00:58"
},
{
"id": 207,
"name": "錢學",
"age": 24,
"id_number": "420117201005123220",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": "2020-11-14 00:58"
},
{
"id": 203,
"name": "孫空",
"age": 19,
"id_number": "420117201005129634",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": "2020-11-14 00:58"
},
{
"id": 211,
"name": "張紅",
"age": 22,
"id_number": "420117201005129909",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": "2020-11-14 00:58"
},
{
"id": 400,
"name": "孫空",
"age": 23,
"id_number": "420117201005129673",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": "2020-11-14 00:58"
},
{
"id": 214,
"name": "王五",
"age": 20,
"id_number": "420117201005126275",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": "2020-11-14 00:58"
},
{
"id": 210,
"name": "錢學",
"age": 18,
"id_number": "420117201005125767",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": "2020-11-14 00:58"
},
{
"id": 202,
"name": "李珍",
"age": 20,
"id_number": "420117201005125731",
"created_at": 1605286706,
"update_at": 0,
"status": 1,
"created_at_text": "2020-11-14 00:58"
}
]
}
如下圖所示:
6. 小結(jié)
本小節(jié)主要介紹如何在模型中追加字段,只需要在模型設置 protected $append
字段屬性即可,需要追加的字段需要定義對應的 getAaBbAttr()
方法對字段賦值,通過追加字段的方式可以很方便的處理某些特定的字段。
Tips: 代碼倉庫:https://gitee.com/love-for-poetry/tp6