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