thinkphp5获取mysql数据库表字段注释1、支持获取单个字段和所有字段。2、使用场景;例如状态:有两种状态:1|正常,2|禁用。通常用于获取器3、#*#为分隔符,json格式保存。

thinkphp5获取mysql数据库表字段注释

1、支持获取单个字段和所有字段。

2、使用场景;例如状态:有两种状态:1|正常,2|禁用。通常用于获取器

3、#*#为分隔符,json格式保存。

blob.png

代码

/**
 * 获取数据库字段注释
 *
 * @param string $table_name 数据表名称(必须,不含前缀)
 * @param string $field 字段名称(默认获取全部字段,单个字段请输入字段名称)
 * @param string $table_schema 数据库名称(可选)
 * @return string
 */
function get_db_column_comment($table_name = '', $field = true, $table_schema = ''){
    // 接收参数
    $database = config('database');
    $table_schema = empty($table_schema) ? $database['database'] : $table_schema;
    $table_name = $database['prefix'] . $table_name;
    
    // 缓存名称
    $fieldName = $field === true ? 'allField' : $field;
    $cacheKeyName = 'db_' . $table_schema . '_' . $table_name . '_' . $fieldName;
    
    // 处理参数
    $param = [
        $table_name,
        $table_schema
    ];
    
    // 字段
    $columeName = '';
    if($field !== true){
        $param[] = $field;
        $columeName = "AND COLUMN_NAME = ?";
    }
    
    // 查询结果
    $result = Db :: query("SELECT COLUMN_NAME as field,column_comment as comment FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = ? AND table_schema = ? $columeName", $param);
    // pp(Db :: getlastsql());
    if(empty($result) && $field !== true){
        return $table_name . '表' . $field . '字段不存在';
    }
    
    // 处理结果
    foreach($result as $k => $v){
        if(strpos($v['comment'], '#*#') !== false){
            $tmpArr = explode('#*#', $v['comment']);
            $data[$v['field']] = json_decode(end($tmpArr), true);
        }
    }
    
    // 字段注释格式不正确
    if(empty($data)){
        return $table_name . '表' . $field . '字段注释格式不正确';
    }
    
    return count($data) == 1 ? reset($data) : $data;
}
print_r(get_db_column_comment('user','tp5'));

运行结果

blob.png