/** 处理两个数据库中表结构的差异
*/
public function deal_table(){
$new_info = \DB::select("select * from INFORMATION_SCHEMA.COLUMNS where table_schema = 'ce_one'");
$old_info = \DB::connection('old_database')->select("select * from INFORMATION_SCHEMA.COLUMNS where table_schema = 'ce_two'");
// dd($new_info,$old_info);
/**TABLE_SCHEMA – 库名
TABLE_NAME – 表名
COLUMN_NAME – 字段名称
COLUMN_DEFAULT – 默认值
IS_NULLABLE – 是否可以为 NULL
DATA_TYPE – 数据类型,如:int
CHARACTER_MAXIMUM_LENGTH – 最大长度
COLUMN_TYPE – 类型,如:int(10) unsigned
COLUMN_COMMENT – 注释*/
$new_column=[]; //新库中所有的字段 按表分组
$same=[]; //新 旧 库相同的数据
foreach ($new_info as $k => $v){
$new_column[$v->TABLE_NAME][]=$v->COLUMN_NAME;
foreach ($old_info as $kk => $vv){
if($v->TABLE_NAME == $vv->TABLE_NAME){
if($v->COLUMN_NAME == $vv->COLUMN_NAME && $v->COLUMN_DEFAULT == $vv->COLUMN_DEFAULT &&
$v->IS_NULLABLE == $vv->IS_NULLABLE && $v->DATA_TYPE == $vv->DATA_TYPE &&
$v->CHARACTER_MAXIMUM_LENGTH == $vv->CHARACTER_MAXIMUM_LENGTH && $v->COLUMN_TYPE == $vv->COLUMN_TYPE &&
$v->COLUMN_COMMENT == $vv->COLUMN_COMMENT){
$same[$v->TABLE_NAME][]=$v->COLUMN_NAME;
}
}
}
}
// dd($new_column,$same);
$diff_column=[]; //每张表中旧库 和新库不同的字段
foreach ($new_column as $k => $v){
foreach ($same as $kk => $vv){
if($k == $kk){
$diff_column[$k]=array_diff($v,$vv); //取出两张表中的差异字段
}
}
}
return $diff_column;
}
比对两个数据库中不同的表
$new_tables = array_map('reset', \DB::select('SHOW TABLES')); //获取所有表名
$old_tables = array_map('reset', \DB::connection('blt')->select('SHOW TABLES')); //获取所有表名
$diff_table=array_diff($old_tables,$new_tables);