开发中可能会遇到一些这样的问题,比如本地一个数据库,线上一个数据库,测试环境一个数据库,协同办公一个数据库,有时候需要进行不断切换数据库,这里操作是在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.退出
如果按其他按键,则继续显示该条信息
这里选择要切换的库此时就可以进行快速切库操作