Laravel多个数据库任意切换

来源:互联网 发布:淘宝记账软件 编辑:程序博客网 时间:2024/06/14 05:54

因为测试环境和生产环境不太一样,数据库有时候也不太一样,所以我需要确认两个环境之间的差异,有没有多的表,有没有多的字段。这里涉及到一个点,指定数据库查询和操作,网上有些人胡乱搞,七世这个是很简单的。在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;}
原创粉丝点击