如何快速生成数据库字典(thinkphp5.0)
本教程将教你快速生成数据库字典
示例代码使用PHP框架:Thinkphp5.0
PHP代码:
/**
* 生成数据库字典html
* 可直接另存为再copy到word文档中使用
*
* @return mixed
*/
public function dataDictionary()
{
$tables = Db::query('SHOW TABLE STATUS');
$table_list = array_map('array_change_key_case', $tables);
$table_data = [];
foreach ($table_list as $item) {
$table_name = str_replace(config('database.prefix'),'',$item['name']);
$table_fields = $this->showColumns($table_name);
foreach ($table_fields as &$fieldItem) {
$fieldItem['comment'] = $this->getDbColumnComment($table_name, $fieldItem['name']);
}
$table_data[] = [
'table_name' => $item['name'],
'table_comment' => $item['comment'],
'table_fields' => $table_fields
];
}
$this->assign('table_data', $table_data); return $this->fetch('');
} /**
* 显示表结构信息
*
* @param string $table
* @return array
*/
private function showColumns($table){ $sql = 'SHOW COLUMNS FROM `'.config('database.prefix').$table.'`';
$result = Db::query($sql);
if ($result === false) return array();
$array = array();
if (!empty($result)) {
foreach ($result as $k=>$v) {
$array[$v['Field']] = [
'name' => $v['Field'],
'type' => $v['Type'],
'null' => $v['Null'],
'default' => $v['Default'],
'primary' => (strtolower($v['Key']) == 'pri'),
'autoinc' => (strtolower($v['Extra']) == 'auto_increment'),
];
}
} return $array;
} /**
* 获取数据库字段注释
*
* @param string $table_name 数据表名称(必须,不含前缀)
* @param string|boolean $field 字段名称(默认获取全部字段,单个字段请输入字段名称)
* @param string $table_schema 数据库名称(可选)
* @return string
*/
private function getDbColumnComment($table_name = '', $field = true, $table_schema = ''){
// 接收参数
$database = config('database'); $table_schema = empty($table_schema) ? $database['database'] : $table_schema;
$table_name = $database['prefix'] . $table_name; // 处理参数
$param = [
$table_name,
$table_schema
]; // 字段
$columnName = '';
if($field !== true){
$param[] = $field;
$columnName = "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 = ? $columnName", $param);
if(empty($result) && $field !== true){
return $table_name . '表' . $field . '字段不存在';
} // 处理结果
foreach($result as $k => $v){
$data[$v['field']] = $v['comment'];
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;
}
Html代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>快速生成数据库字典</title>
<style type="text/css">
.table-name {
text-align: center;
margin: 15px auto;
font-weight: bold;
font-size: 20px;
} table {
border-collapse: collapse;
margin: 0 auto;
text-align: center;
width: 550px;
} table caption {
margin: 15px auto;
} table td, table th {
border: 1px solid #cad9ea;
color: #666;
height: 30px;
} table thead th {
background-color: #CCE8EB;
width: 100px;
} table tr:nth-child(odd) {
background: #fff;
} table tr:nth-child(even) {
background: #F5FAFA;
}
</style>
</head>
<body> {foreach $table_data as $tableInfo}
<div class="table-name">{$tableInfo.table_name}(表注释:{$tableInfo.table_comment})</div>
<table class="table">
<thead>
<tr>
<th>字段</th>
<th>类型</th>
<th>空</th>
<th>默认</th>
<th>注释</th>
</tr>
</thead>
<tbody>
{foreach $tableInfo['table_fields'] as $field}
<tr>
<td>
{$field.name}
</td>
<td>
{$field.type}
</td>
<td>
{$field.null}
</td>
<td style="max-width: 30px;">
{$field.default}
</td>
<td>
{$field.comment}
</td>
</tr>
{/foreach}
</tbody>
</table>
{/foreach} </body>
</html>
注:如需保存到word文档,需网页另存为html文件并用word软件打开,将内容全选复制到新的word文档中即可。
如有不明白的,欢迎下方留言。
如何快速生成数据库字典(thinkphp5.0)的更多相关文章
- 使用Navicat快速生成数据库字典
https://blog.csdn.net/maquealone/article/details/60764420
- 自动生成数据库字典(sql2008)
每次做项目的时候都要做数据字典,这种重复的工作实在很是痛苦,于是广找资料,终于完成了自动生成数据库字典的工作,废话少说,上代码. 存储过程: SET ANSI_NULLS ON GO SET QUOT ...
- 自动生成数据库字典(sql2008) 转自 飘渺の云海
每次做项目的时候都要做数据字典,这种重复的工作实在很是痛苦,于是广找资料,终于完成了自动生成数据库字典的工作,废话少说,上代码. 截取一部分图片: 存储过程: SET ANSI_NULLS ON GO ...
- MS SQL生成数据库字典脚本
开发一个项目时都会有一个蛋疼的问题——写数据库需求文档,然后根据这个文档来建数据库,如果后来需求改了,要改数据库还要改文档,有时忙着忙着就忘改了,导致文档是过期的.那么我们自己写个脚本在数据库运行直接 ...
- SQL Server2008生成数据库字典
1.我们在开发过程中可能会遇到这样的一种情况"当我们进行维护其他人的项目时或者项目的二次开发时可能会对原始的数据表进行分析",这里为大家介绍一种方便快捷生成数据库字典的方式. 我们 ...
- 【EF框架】EF DBFirst 快速生成数据库实体类 Database1.tt
现有如下需求,数据库表快速映射到数据库实体类 VS给出的两个选择都有问题,并不能实现,都是坑啊 EF .x DbContext 生成器 EF .x DbContext 生成器 测试结果如下 生成文件 ...
- IDEA快速生成数据库表的实体类
IDEA连接数据库 IDEA右边侧栏有个DataSource,可以通过这个来连接数据库,我们先成功连接数据库 点击进入后填写数据库进行连接,注意记得一定要去Test Connection 确保正常连接 ...
- DataDictionaryTool 一款生成数据库字典工具支持mysql和oracle
因为常常查看mysql数据结构,频繁操作.很不爽,于是想把数据表制作成数据字典,于是网上搜的一款工具 DataDictionaryTool ,最终制作成功,分享给大家! 1,此工具需要安装jre ,简 ...
- PowerDesigner 生成数据库字典(有图有真相,绝对自创非转载)
最近用pd做模型,生成数据字典时在网上找了很多,但是看的都很晕,说的不明白. 经过自己研究终于找到一个简单的方式,当然这只是简单的,大家举一反三去吧.辛苦弄的,求点赞!!! 先看效果图: 现在说一下步 ...
随机推荐
- layui分页
毕业已经两年,期间经历了很多.一个人欢笑与哭泣,在墙角.在路边.在床上.每天搭乘首班车来到公司,每天无数次反省自己,每天每天再问自己为什么活着. 一.下载并引用css和js 地址:点我 <lin ...
- centos7 nginx访问目录403解决
查看 /usr/sbin/sestatusSELinux status是不是enabled 然后 vi /etc/selinux/config修改:SELINUX=disabledreboot
- DBMS_SQLTUNE使用方法
SQL调优工具包DBMS_SQLTUNE的使用方法 oracle 提供了优化建议功能包DBMS_SQLTUNE,该包可以帮助我们分析SQL,并提供优化建议. 原有执行计划alter session s ...
- 【设计模式最终总结】桥接模式 VS 外观模式
差异点 外观模式,是把功能通过一个接口提供出来,方便日后更换实现,或者这种实现可以由多方提供,但同时只用一个.典型例子:@Slf4j 桥接模式,多个维度,每个维度提供一个接口,这些接口集中在一个类中, ...
- asp.net mvc 4.0常见的几个问题
看书的时候遇到很多不知所云的错误,都是在网上找到的解决方法,没办法,从asp.net到mcv很多的新技术,没有一点思路,只能在网上搜罗了. 1.更新产品不成功 更新产品的时候一直不能更新成功,但是很奇 ...
- SAP C/4HANA与人工智能和增强现实(AR)技术结合的又一个创新案例
今天这篇迟到的文章,来自我的同事Aviva. 去年SAP C/4HANA发布之后,SAP的从业者们可能或多或少都读过一些来自SAP官方渠道,比如微信公众号"SAP天天事"发布的一些 ...
- java学习第一步,使用IntelliJ IDEA编写自己的第一个java程序
首先下载java的jdk,然后说一下IDEA的配置 IntelliJ IDEA目前公认的最好的java开发工具,不过一般的学校的教学还是使用eclipse来进行java的开发.所以老师一般只会教你如何 ...
- SOJ4459 skysky's game(贪心+优先队列)
天天最近迷上了天天爱消除游戏,现在他觉得这个游戏已经没有意思了.所以他发明一个新的消除游戏.有n堆糖果,每一个糖果有一个重量w,天天每次都选择两个糖果合并为一个糖果,新的糖果的重量等于这两个糖果的重量 ...
- mysql配置远程登录
1.vim /etc/my.cnf注释这一行:bind-address=127.0.0.1 ==> #bind-address=127.0.0.1 2.重启服务:sudo service mys ...
- CAShapeLayer使用
UIView *showView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; [self.view addSubv ...