国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

Jason_Geng / 3303人閱讀

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

因?yàn)橐獙戧P(guān)于數(shù)據(jù)庫(kù)表說明的文檔,需要有表結(jié)構(gòu),如果一個(gè)個(gè)表去建表格,然后在復(fù)制每個(gè)字段進(jìn)去,那就太沒效率了。其實(shí)程序很簡(jiǎn)單,用程序獲取數(shù)據(jù)庫(kù)Schema,再寫入到markdown文件(文件格式md)里就可以了。因?yàn)轫?xiàng)目是基于YII2框架,所以用YII2的命令工具來實(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ù)沒有表
        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ì)及字典說明.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 = "| 字段名 | 類型 | 說明 | 
";
            $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);
    }

    /**
     * 需要過濾的表(不希望生成文檔的表)
     * @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ì)及字典說明.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://specialneedsforspecialkids.com/yun/28120.html

相關(guān)文章

  • Yii2的無編程migrate示例

    摘要:它分為這么幾個(gè)部分,這是下的標(biāo)準(zhǔn)執(zhí)行命令,沒什么好說的。,前面這是里執(zhí)行的標(biāo)準(zhǔn)命令,后面是說明我們要?jiǎng)?chuàng)建一個(gè)新的文件。,引號(hào)里的內(nèi)容詳細(xì)說明了我們要?jiǎng)?chuàng)建的這張數(shù)據(jù)庫(kù)表中的字段名稱及類型等。 認(rèn)識(shí)總是在不斷進(jìn)步的,其實(shí)事情遠(yuǎn)遠(yuǎn)沒有這么復(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ī)還沒有安裝,我的做法是是直接下載包假定你的工作目錄是,將下載的放在下命令行進(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)教程之新手入門指南-簡(jiǎn)單博客管理系統(tǒng)

    摘要:為了演示特性的基本使用,我將會(huì)帶領(lǐng)大家構(gòu)建一個(gè)簡(jiǎn)單的博客管理系統(tǒng)。目前為止,我們借助生成了一系列操作。有好提示實(shí)際開發(fā)中,后臺(tái)管理理應(yīng)利用協(xié)助開發(fā),可快速提高開發(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

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

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

    摘要:,已經(jīng)好了,試著訪問根目錄下,比如試試,出現(xiàn)界面就成功了沒從先就用命令看下的路由最上面條就是剛剛添加的路由。 先說什么是Swagger, Swagger的使用目的是方便優(yōu)美的呈現(xiàn)出接口API的各種定義, 生成API文檔, 包括參數(shù), 路徑之類. 有時(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元查看
<