如何快速生成数据库字典(thinkphp5.0)
2019-01-10 07:51:52来源:博客园 阅读 ()
本教程将教你快速生成数据库字典
示例代码使用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文档中即可。
如有不明白的,欢迎下方留言。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- PHPExcel如何读取Excel文件 2020-03-10
- PHP生成网站桌面快捷方式代码分享 2020-03-04
- PHP之生成GIF动画的实现方法 2020-02-21
- php二维码生成以及下载实现 2020-02-17
- zend studio出现乱码如何解决 2020-02-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash