Laravel多个数据库任意切换

因为测试环境和生产环境不太一样,数据库有时候也不太一样,所以我需要确认两个环境之间的差异,有没有多的表,有没有多的字段。这里涉及到一个点,指定数据库查询和操作,网上有些人胡乱搞,七世这个是很简单的。在config下面的database.php配置你需要和可能会用到的数据信息,默认是* ‘default’ => env(‘DB_CONNECTION’, ‘mysql’),*
看到了吧?
这个是默认的连接,我们一般会把默认的数据库的信息放在.env文件里面,因为使用git的时候,每个服务器配置稍有区别,这个文件是通常被忽略掉的。需要注意的是:我们配置其他可能会用到的数据库信息的时候,像下面这样配置,注意看有啥不同?默认的哪个数据库先从env文件里面取值。
其他数据库连接信息,就直接配置。然后使用的时候就用connect方法指定连接信息即可。具体的看下面的代码实例:

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', 'localhost'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
    'strict' => false,
],

'mysql_test' => [
    'driver' => 'mysql',
    'host' => '1xx.78.xxx.142',
    'database' => 'xxx',
    'username' => 'xxx',
    'password' => 'xxx',
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
    'strict' => false,
],

'mysql_production' => [
    'driver' => 'mysql',
    'host' => '35.xxx.xxx.224',
    'database' => 'xxx',
    'username' => 'xxx',
    'password' => 'xxx',
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
    'strict' => false,
],
D:\phpStudy\WWW\xxx\config\database.php
public function diffDatabase() {
    //设置不限制运行时间
    set_time_limit(0);

    //设置链接多个数据库
    $mysql_production = DB::connection('mysql_production');
    $mysql_test = DB::connection('mysql_test');
    // $mysql = DB::connection('mysql');
    //获取数据库中的表
    $mysql_production_tables = array_map('reset', $mysql_production->select('SHOW TABLES'));
    $mysql_test_tables = array_map('reset', $mysql_test->select('SHOW TABLES'));

    //获取两个数据库中不同的表
    $diff_tables = array_diff($mysql_test_tables, $mysql_production_tables);
    //获取两个数据库中不同的字段
    foreach ($mysql_test_tables as $key => $value) {
        //获取在测试数据库中,却不在真实数据库中的字段
        $diff_column[$value] = array_diff(Schema::connection('mysql_test')->getColumnListing($value), Schema::connection('mysql_production')->getColumnListing($value));

        //获取在真实数据库中,却不在测试数据库中的字段
        $production_test_diff_column[$value] = array_diff(Schema::connection('mysql_production')->getColumnListing($value), Schema::connection('mysql_test')->getColumnListing($value));
    }
    $diff_column = array_filter($diff_column);

    echo "<pre>";
    if (!empty($diff_tables)) {
        echo '<h1>生产环境中没有的表:</h1>';
        print_r($diff_tables);
    }
    if (!empty($diff_column)) {
        echo '<h1>测试环境有,但生产环境中没有的字段:</h1>';
        print_r($diff_column);
    }
    if (!empty($production_test_diff_column)) {
        echo '<h1>测试环境没有,生产环境有的字段:</h1>';
        print_r($production_test_diff_column);
    }
    echo "</pre>";
    if (empty($diff_tables) && empty($diff_column) && empty($production_test_diff_column)) {
        echo '<h1>真实环境与测试环境相比没有差异!</h1>';
    }
    exit;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SHUIPING_YANG

你的鼓励是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值