如何快速生成数据库字典(thinkphp5.0)
程序员文章站
2022-04-05 10:05:46
本教程将教你快速生成数据库字典 示例代码使用PHP框架:Thinkphp5.0 PHP代码: Html代码: 注:如需保存到word文档,需网页另存为html文件并用word软件打开,将内容全选复制到新的word文档中即可。 如有不明白的,欢迎下方留言。 ......
本教程将教你快速生成数据库字典
示例代码使用php框架:thinkphp5.0
php代码:
1 /** 2 * 生成数据库字典html 3 * 可直接另存为再copy到word文档中使用 4 * 5 * @return mixed 6 */ 7 public function datadictionary() 8 { 9 $tables = db::query('show table status'); 10 $table_list = array_map('array_change_key_case', $tables); 11 $table_data = []; 12 foreach ($table_list as $item) { 13 $table_name = str_replace(config('database.prefix'),'',$item['name']); 14 $table_fields = $this->showcolumns($table_name); 15 foreach ($table_fields as &$fielditem) { 16 $fielditem['comment'] = $this->getdbcolumncomment($table_name, $fielditem['name']); 17 } 18 $table_data[] = [ 19 'table_name' => $item['name'], 20 'table_comment' => $item['comment'], 21 'table_fields' => $table_fields 22 ]; 23 } 24 $this->assign('table_data', $table_data); 25 26 return $this->fetch(''); 27 } 28 29 /** 30 * 显示表结构信息 31 * 32 * @param string $table 33 * @return array 34 */ 35 private function showcolumns($table){ 36 37 $sql = 'show columns from `'.config('database.prefix').$table.'`'; 38 $result = db::query($sql); 39 if ($result === false) return array(); 40 $array = array(); 41 if (!empty($result)) { 42 foreach ($result as $k=>$v) { 43 $array[$v['field']] = [ 44 'name' => $v['field'], 45 'type' => $v['type'], 46 'null' => $v['null'], 47 'default' => $v['default'], 48 'primary' => (strtolower($v['key']) == 'pri'), 49 'autoinc' => (strtolower($v['extra']) == 'auto_increment'), 50 ]; 51 } 52 } 53 54 return $array; 55 } 56 57 /** 58 * 获取数据库字段注释 59 * 60 * @param string $table_name 数据表名称(必须,不含前缀) 61 * @param string|boolean $field 字段名称(默认获取全部字段,单个字段请输入字段名称) 62 * @param string $table_schema 数据库名称(可选) 63 * @return string 64 */ 65 private function getdbcolumncomment($table_name = '', $field = true, $table_schema = ''){ 66 // 接收参数 67 $database = config('database'); 68 69 $table_schema = empty($table_schema) ? $database['database'] : $table_schema; 70 $table_name = $database['prefix'] . $table_name; 71 72 // 处理参数 73 $param = [ 74 $table_name, 75 $table_schema 76 ]; 77 78 // 字段 79 $columnname = ''; 80 if($field !== true){ 81 $param[] = $field; 82 $columnname = "and column_name = ?"; 83 } 84 85 // 查询结果 86 $result = db::query("select column_name as field,column_comment as comment from information_schema.columns where table_name = ? and table_schema = ? $columnname", $param); 87 if(empty($result) && $field !== true){ 88 return $table_name . '表' . $field . '字段不存在'; 89 } 90 91 // 处理结果 92 foreach($result as $k => $v){ 93 $data[$v['field']] = $v['comment']; 94 if(strpos($v['comment'], '#*#') !== false){ 95 $tmparr = explode('#*#', $v['comment']); 96 $data[$v['field']] = json_decode(end($tmparr), true); 97 } 98 } 99 // 字段注释格式不正确 100 if(empty($data)){ 101 return $table_name . '表' . $field . '字段注释格式不正确'; 102 } 103 return count($data) == 1 ? reset($data) : $data; 104 }
html代码:
1 <html> 2 <head> 3 <meta http-equiv="content-type" content="text/html; charset=utf-8"> 4 <title>快速生成数据库字典</title> 5 <style type="text/css"> 6 .table-name { 7 text-align: center; 8 margin: 15px auto; 9 font-weight: bold; 10 font-size: 20px; 11 } 12 13 table { 14 border-collapse: collapse; 15 margin: 0 auto; 16 text-align: center; 17 width: 550px; 18 } 19 20 table caption { 21 margin: 15px auto; 22 } 23 24 table td, table th { 25 border: 1px solid #cad9ea; 26 color: #666; 27 height: 30px; 28 } 29 30 table thead th { 31 background-color: #cce8eb; 32 width: 100px; 33 } 34 35 table tr:nth-child(odd) { 36 background: #fff; 37 } 38 39 table tr:nth-child(even) { 40 background: #f5fafa; 41 } 42 </style> 43 </head> 44 <body> 45 46 {foreach $table_data as $tableinfo} 47 <div class="table-name">{$tableinfo.table_name}(表注释:{$tableinfo.table_comment})</div> 48 <table class="table"> 49 <thead> 50 <tr> 51 <th>字段</th> 52 <th>类型</th> 53 <th>空</th> 54 <th>默认</th> 55 <th>注释</th> 56 </tr> 57 </thead> 58 <tbody> 59 {foreach $tableinfo['table_fields'] as $field} 60 <tr> 61 <td> 62 {$field.name} 63 </td> 64 <td> 65 {$field.type} 66 </td> 67 <td> 68 {$field.null} 69 </td> 70 <td style="max-width: 30px;"> 71 {$field.default} 72 </td> 73 <td> 74 {$field.comment} 75 </td> 76 </tr> 77 {/foreach} 78 </tbody> 79 </table> 80 {/foreach} 81 82 83 </body> 84 </html>
注:如需保存到word文档,需网页另存为html文件并用word软件打开,将内容全选复制到新的word文档中即可。
如有不明白的,欢迎下方留言。