thinkphp 結果集中添加額外字段

tp model 結果集添加額外字段
手冊中說有個append方法可以調用,append([‘abc’])沒詳說具體怎麼用,於是看了看源碼。
append會遍歷當前結果集,調用模型append方法添加額外字段,其作用在結果集調用toArray是展現。
toArray是會調用getAttr方法獲取字段值,getAttr方法會觸發獲取器,所以可以利用獲取器產生任意值,並且獲取器中可以利用$this獲取當前模型任意數據的。
所以添加額外字段時,以is_admin爲例:

//UserModel 中獲取器
public function getIsAdminAttr($value){
	return $this->id===1;
}
// 查詢使用
$user = UserModel::select()->append(['is_admin']);
<?php

namespace app\admin\model;

use think\Model;

class Command extends Model
{
    // 表名
    protected $name = 'command';

    // 自動寫入時間戳字段
    protected $autoWriteTimestamp = 'int';

    // 定義時間戳字段名
    protected $createTime = 'createtime';
    protected $updateTime = 'updatetime';

    // 追加屬性
    protected $append = [
        'executetime_text',
        'type_text',
        'status_text'
    ];


    public function getStatusList()
    {
        return ['successed' => __('Successed'), 'failured' => __('Failured')];
    }


    public function getExecutetimeTextAttr($value, $data)
    {
        $value = $value ? $value : $data['executetime'];
        return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
    }

    public function getTypeTextAttr($value, $data)
    {
        $value = $value ? $value : $data['type'];
        $list = ['crud' => '一鍵生成CRUD', 'menu' => '一鍵生成菜單', 'min' => '一鍵壓縮打包', 'api' => '一鍵生成文檔'];
        return isset($list[$value]) ? $list[$value] : '';
    }

    public function getStatusTextAttr($value, $data)
    {
        $value = $value ? $value : $data['status'];
        $list = $this->getStatusList();
        return isset($list[$value]) ? $list[$value] : '';
    }

    protected function setExecutetimeAttr($value)
    {
        return $value && !is_numeric($value) ? strtotime($value) : $value;
    }


}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章