Yii2实现快速切库操作

开发中可能会遇到一些这样的问题,比如本地一个数据库,线上一个数据库,测试环境一个数据库,协同办公一个数据库,有时候需要进行不断切换数据库,这里操作是在config文件夹下快速更改db.php的内容;

首先yii2中db.php文件的内容是:

<?php

return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=yii2basic',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8',

    // Schema cache options (for production environment)
    //'enableSchemaCache' => true,
    //'schemaCacheDuration' => 60,
    //'schemaCache' => 'cache',
];

这里我们在控制台命令的commands文件夹中创建一个ChangeDbController.php文件夹,进行切库命令的编写

     /**
     * @author: BGSN
     */
    public function actionGetDb()
    {
        $DbDir = __DIR__ . '/../config/db.php';
        if (is_file($DbDir)) {
            $DbContent = require_once $DbDir;
            //假设有库1:127.0.0.1 dbname=yii2basic username = root ;password:root
            //     库2:127.0.0.2 dbname=yii2basic username = root ;password:root
            //     库3:127.0.0.3 dbname=yii2basic username = root ;password:root
            //     库4:127.0.0.4 dbname=yii2basic username = root ;password:root
            $message = '当前库为:';
            $nowTable = '';
            if (false !== strpos($DbContent['dsn'],'127.0.0.1' )) {
                $nowTable= '127.0.0.1';
            } else if (false !== strpos( $DbContent['dsn'],'127.0.0.2')) {
                $nowTable= '127.0.0.2';
            } else if (false !== strpos( $DbContent['dsn'],'127.0.0.3')) {
                $nowTable= '127.0.0.3';
            } else if (false !== strpos($DbContent['dsn'],'127.0.0.4')) {
                $nowTable= '127.0.0.4';
            }
            $message .= $nowTable;
            $DbReturn = [];
            $this->showMessage($message,$DbReturn);
            if (!$DbReturn) {
                echo '谢谢操作'."\n";
                exit();
            }

            $confText = "<?php
          
return [
    'class'         => 'yii\db\Connection',
    'dsn'           => '".$DbReturn['table']."',
    'username'      => '".$DbReturn['user']."',
    'password'      => '".$DbReturn['password']."',
    'charset'       => 'utf8',
];";
            if (file_put_contents($DbDir,$confText)) {
                echo '切换成功:'.$DbReturn['table']."\n";
            } else {
                echo '切换失败:'.$nowTable."\n";
            }
        } else {
            echo '数据库文件不存在'."\n";
        }
    }

    /**
     * @param $message
     * @param $return
     * @author: BGSN
     */
    private function showMessage($message,&$return) {
        echo $message.'.请选择需要切换的库:
1.127.0.0.1
2.127.0.0.2
3.127.0.0.3
4.127.0.0.4
5.退出
如果按其他按键,则继续显示该条信息
';
        $table = $user = $password = '';
        $changeDbNumber = fgets(STDIN);
        switch ($changeDbNumber) {
            case 1: $table = 'mysql:host=127.0.0.1;dbname=yii2basic';$user = 'root';$password = 'root';break;
            case 2: $table = 'mysql:host=127.0.0.2;dbname=yii2basic';$user = 'root';$password = 'root';break;
            case 3: $table = 'mysql:host=127.0.0.3;dbname=yii2basic';$user = 'root';$password = 'root';break;
            case 4: $table = 'mysql:host=127.0.0.4;dbname=yii2basic';$user = 'root';$password = 'root';break;
            case 5: die('再见!');
            default : $this->showMessage($message,$return);
        }
        if (!$return) {
            $return = ['table' => $table, 'user' => $user,'password' => $password];
        }
    }

这里在控制台输入命令

php yii change-db/get-db:

cyb basic (develop) $ php yii change-db/get-db
当前库为:.请选择需要切换的库:
1.127.0.0.1
2.127.0.0.2
3.127.0.0.3
4.127.0.0.4
5.退出
如果按其他按键,则继续显示该条信息

这里选择要切换的库此时就可以进行快速切库操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章