YII2命令列實現資料庫表結構文件自動生成

2021-09-14 03:05:19 字數 2282 閱讀 1535

因為要寫關於資料庫表說明的文件,需要有表結構,如果乙個個表去建**,然後在複製每個字段進去,那就太沒效率了。其實程式很簡單,用程式獲取資料庫schema,再寫入到markdown檔案(檔案格式md)裡就可以了。因為專案是基於yii2框架,所以用yii2的命令工具來實現。大概的效果圖如下:

/** * 資料庫表結構文件自動生成工具

* class tableschemacontroller

* @package console\controllers

* @author wuzhc * @since 2018-01-18

*/class tableschemacontroller extends controller

$alltables = $db->getschema()->gettablenames();

if ('all' === $ar**[2]) else

$tables = (array)$ar**[2];

}// 當前資料庫沒有表

if (count(array_filter($tables)) == 0)

$root = dirname(dirname(dirname(__file__)));

$filename = $ar**[3] ? $ar**[3] : '/docs/note/資料庫設計及字典說明.md';

$filepath = $root . $filename;

$fp = fopen($filepath, 'a+');

if (!$fp)

foreach ($tables as $table)

fwrite($fp, "#### $schema->name 表 \n");

// 表頭

$header = "| 欄位名 | 型別 | 說明 | \n";

$header .= "|:--------:|:---------:|:-------:| \n";

fwrite($fp, $header);

// 字段

$row = '';

foreach ($schema->columns as $col => $obj)

fwrite($fp, $row);

fwrite($fp, "\r\n\r\n");

echo "$schema->name successfully \n";

}fclose($fp);

}/**

* 需要過濾的表(不希望生成文件的表)

* @return array

*/protected function filtertables()

/*** 所有表

* @return \string

*/protected function alltables()

/*** 清空

*/public function actionclear()

$root = dirname(dirname(dirname(__file__)));

$filepath = $ar**[2] ? $ar**[2] : '/docs/note/資料庫設計及字典說明.md';

$filepath = $root . $filepath;

if (!is_file($filepath))

$fp = fopen($filepath, 'w');

if (!$fp)

fwrite($fp, '');

fclose($fp);

echo "clear successfully \n";}}

執行命令:

./yii table-schema/create [all|tablename] [filename] 

# 例如生成所有表到test.md檔案

./yii table-schema/create all test.md

# 生成user表到test.md檔案

./yii table-schema/create user test.md

# 清空文件

./yii table-schema/clear [filename]

程式很簡單,但是很實用~~

yii2資料庫遷移

yii migrate create create test table 建立乙個資料庫遷移 yii migrate 提交所有的遷移 yii migrate m160623 034801 create test table 指定類名,提交乙個遷移 yii migrate down 還原最近一次遷移 ...

基礎YII2資料庫操作

注意 為了保持精度,從資料庫中取出的資料都被表示為字串,即使相應的資料庫列型別數值。當建立從乙個帶引數的sql乙個db命令,你應該總是使用繫結引數的方法來防止sql注入攻擊。引數繫結是通過預處理語句來實現。除了防止sql注入攻擊,也可通過一次準備sql語句和多次使用不同的引數執行它提高效能 yii ...

yii2 查詢資料庫語法

1 query0 imgroupuser find where gid 56680dfc60b215d62104a4d8 select user client id all ar2 query1 imgroupuser findall gid 56680dfc60b215d62104a4d8 ar3...