成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

YII2命令行實(shí)現(xiàn)數(shù)據(jù)庫(kù)表結(jié)構(gòu)文檔自動(dòng)生成

Jason_Geng / 3328人閱讀

摘要:因?yàn)橐獙?xiě)關(guān)于數(shù)據(jù)庫(kù)表說(shuō)明的文檔,需要有表結(jié)構(gòu),如果一個(gè)個(gè)表去建表格,然后在復(fù)制每個(gè)字段進(jìn)去,那就太沒(méi)效率了。其實(shí)程序很簡(jiǎn)單,用程序獲取數(shù)據(jù)庫(kù),再寫(xiě)入到文件文件格式里就可以了。因?yàn)轫?xiàng)目是基于框架,所以用的命令工具來(lái)實(shí)現(xiàn)。

因?yàn)橐獙?xiě)關(guān)于數(shù)據(jù)庫(kù)表說(shuō)明的文檔,需要有表結(jié)構(gòu),如果一個(gè)個(gè)表去建表格,然后在復(fù)制每個(gè)字段進(jìn)去,那就太沒(méi)效率了。其實(shí)程序很簡(jiǎn)單,用程序獲取數(shù)據(jù)庫(kù)Schema,再寫(xiě)入到markdown文件(文件格式md)里就可以了。因?yàn)轫?xiàng)目是基于YII2框架,所以用YII2的命令工具來(lái)實(shí)現(xiàn)。大概的效果圖如下:


 * @since 2018-01-18
 */
class TableSchemaController extends Controller
{
    /**
     * 數(shù)據(jù)庫(kù)表生成
     */
    public function actionCreate()
    {
        global $argv;

        if (!$argv[2] || strcasecmp($argv[2], "help") === 0) {
            echo "Usage: ./yii table-schema/create [all|tablename] [filename]
";
            exit;
        }

        $db = Yii::$app->db;
        $allTables = $db->getSchema()->getTableNames();

        if ("all" === $argv[2]) {
            $tables = array_diff($allTables, $this->filterTables());
        } else {
            if (!in_array($argv[2], $allTables)) {
                echo sprintf("%s isn"t exist 
", $argv[2]);
                exit;
            }
            $tables = (array)$argv[2];
        }

        // 當(dāng)前數(shù)據(jù)庫(kù)沒(méi)有表
        if (count(array_filter($tables)) == 0) {
            echo "Database has not table 
";
        }

        $root = dirname(dirname(dirname(__FILE__)));
        $filename = $argv[3] ? $argv[3] : "/docs/note/數(shù)據(jù)庫(kù)設(shè)計(jì)及字典說(shuō)明.md";
        $filePath = $root . $filename;

        $fp = fopen($filePath, "a+");
        if (!$fp) {
            echo "Open file failed 
";
        }

        foreach ($tables as $table) {
            $schema = $db->getTableSchema($table, true);
            if (!$schema->columns) {
                continue;
            }

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

            // 表頭
            $header = "| 字段名 | 類(lèi)型 | 說(shuō)明 | 
";
            $header .= "|:--------:|:---------:|:-------:| 
";
            fwrite($fp, $header);

            // 字段
            $row = "";

            foreach ($schema->columns as $col => $obj) {
                $comment = $obj->isPrimaryKey ? "主鍵" : $obj->comment;
                $row .= "| $obj->name | $obj->dbType | $comment | 
";
            }

            fwrite($fp, $row);
            fwrite($fp, "

");

            echo "$schema->name successfully 
";
        }

        fclose($fp);
    }

    /**
     * 需要過(guò)濾的表(不希望生成文檔的表)
     * @return array
     */
    protected function filterTables()
    {
        $filterTables = [
            "tbmigration",
            "tbAuthAssignment",
            "tbAuthItemChild",
            "tbAuthRule",
            "tbItemTable"
        ];

        return $filterTables;
    }

    /**
     * 所有表
     * @return string[]
     */
    protected function allTables()
    {
        return Yii::$app->db->getSchema()->getTableNames();
    }

    /**
     * 清空
     */
    public function actionClear()
    {
        global $argv;

        if (!$argv[2] || strcasecmp($argv[2], "help") === 0) {
            echo "Usage: ./yii table-schema/clear [filename]
";
            exit;
        }

        $root = dirname(dirname(dirname(__FILE__)));
        $filePath = $argv[2] ? $argv[2] : "/docs/note/數(shù)據(jù)庫(kù)設(shè)計(jì)及字典說(shuō)明.md";
        $filePath = $root . $filePath;

        if (!is_file($filePath)) {
            echo "$filePath isn"t exists 
";
            exit;
        }

        $fp = fopen($filePath, "w");
        if (!$fp) {
            echo "Open file failed 
";
        }

        fwrite($fp, "");
        fclose($fp);

        echo "Clear successfully 
";
    }
}

執(zhí)行命令:

./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]

程序很簡(jiǎn)單,但是很實(shí)用~~

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/28120.html

相關(guān)文章

  • Yii2的無(wú)編程migrate示例

    摘要:它分為這么幾個(gè)部分,這是下的標(biāo)準(zhǔn)執(zhí)行命令,沒(méi)什么好說(shuō)的。,前面這是里執(zhí)行的標(biāo)準(zhǔn)命令,后面是說(shuō)明我們要?jiǎng)?chuàng)建一個(gè)新的文件。,引號(hào)里的內(nèi)容詳細(xì)說(shuō)明了我們要?jiǎng)?chuàng)建的這張數(shù)據(jù)庫(kù)表中的字段名稱(chēng)及類(lèi)型等。 認(rèn)識(shí)總是在不斷進(jìn)步的,其實(shí)事情遠(yuǎn)遠(yuǎn)沒(méi)有這么復(fù)雜,我們只需要安裝一個(gè)插件就夠了: composer require -dev --prefer-dist insolita/yii2-migration...

    張紅新 評(píng)論0 收藏0
  • Yii2 起步 之創(chuàng)建項(xiàng)目

    摘要:目前還處于版本,相關(guān)文檔也一直在變化,如有疏漏,還請(qǐng)及時(shí)反饋安裝兩種安裝方式,或者下載包使用安裝初始化項(xiàng)目推薦下,如果本機(jī)還沒(méi)有安裝,我的做法是是直接下載包假定你的工作目錄是,將下載的放在下命令行進(jìn)入執(zhí)行如下命令,初始化一個(gè)基于的應(yīng)用 yii2目前還處于beta版本,相關(guān)文檔也一直在變化,如有疏漏,還請(qǐng)及時(shí)反饋 Yii2安裝 兩種安裝方式,composer或者下載zip包 ...

    wuyangnju 評(píng)論0 收藏0
  • yii2實(shí)戰(zhàn)教程之新手入門(mén)指南-簡(jiǎn)單博客管理系統(tǒng)

    摘要:為了演示特性的基本使用,我將會(huì)帶領(lǐng)大家構(gòu)建一個(gè)簡(jiǎn)單的博客管理系統(tǒng)。目前為止,我們借助生成了一系列操作。有好提示實(shí)際開(kāi)發(fā)中,后臺(tái)管理理應(yīng)利用協(xié)助開(kāi)發(fā),可快速提高開(kāi)發(fā)效果。 作者:白狼 出處:http://www.manks.top/document/easy_blog_manage_system.html 本文版權(quán)歸作者,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出...

    harriszh 評(píng)論0 收藏0
  • Yii2系列教程七:Behaviors And Validations

    摘要:原文來(lái)自這一篇文章的開(kāi)頭就無(wú)需多言了,緊接著上一篇的內(nèi)容和計(jì)劃,這一篇我們來(lái)說(shuō)說(shuō)的和。,那既然這樣,我們就來(lái)實(shí)現(xiàn)一下唄。所以我們首先需要將表中的幾條數(shù)據(jù)刪掉。下一節(jié)再詳細(xì)講講吧,這一節(jié)寫(xiě)下來(lái)貌似要說(shuō)的實(shí)在有點(diǎn)多。 原文來(lái)自:https://jellybool.com/post/programming-with-yii2-behaviors-and-validat... 這一篇...

    fasss 評(píng)論0 收藏0
  • Swagger PHP使用指南

    摘要:,已經(jīng)好了,試著訪問(wèn)根目錄下,比如試試,出現(xiàn)界面就成功了沒(méi)從先就用命令看下的路由最上面條就是剛剛添加的路由。 先說(shuō)什么是Swagger, Swagger的使用目的是方便優(yōu)美的呈現(xiàn)出接口API的各種定義, 生成API文檔, 包括參數(shù), 路徑之類(lèi). 有時(shí)后端改了API的參數(shù)或者其他設(shè)置, 前端直接看這個(gè)Swagger UI就可以, 方便項(xiàng)目管理和團(tuán)隊(duì)協(xié)作. 官網(wǎng): http://swagg...

    cnio 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<