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; }