예제 #1
0
 private function get_structure_difference()
 {
     // Список таблиц
     $tables = Cms_Structure::get_all_tables();
     $db_data = array();
     $db_tables = array_diff(Cms::get_dal_instance()->get_tables(), Cms::get_ignore_tables());
     foreach ($db_tables as $db_table_name) {
         $db_data[$db_table_name] = Cms::get_dal_instance()->get_columns($db_table_name);
     }
     $structure_table_names = Cms_Structure::get_all_table_names();
     $to_del = array();
     $to_add = array_diff($db_tables, $structure_table_names);
     $to_change = array();
     foreach ($tables as $table) {
         $alias = $table->get_alias();
         $tname = $table->get_table_name();
         // Если таблица есть в БД - сравниваем столбцы
         if (array_key_exists($tname, $db_data)) {
             $tcolumns = $table->get_columns();
             $db_columns = $db_data[$tname];
             // Если столбцы в БД и в файле структуры различаются - требуются изменения
             if (array_keys($tcolumns) != array_keys($db_columns)) {
                 $to_change[] = $alias;
             }
         } else {
             $to_del[] = $alias;
         }
     }
     $result = array('tables' => $tables, 'db_data' => $db_data, 'to_add' => $to_add, 'to_del' => $to_del, 'to_change' => $to_change);
     return $result;
 }