|
|
@@ -43,27 +43,27 @@ return new class extends Migration
|
|
|
}
|
|
|
|
|
|
// 4. Обновляем индекс
|
|
|
- Schema::table('spare_part_orders', function (Blueprint $table) {
|
|
|
- // Отключаем проверку внешних ключей
|
|
|
- DB::statement('SET FOREIGN_KEY_CHECKS=0');
|
|
|
-
|
|
|
- // Удаляем старый индекс если существует
|
|
|
- $indexName = 'spare_part_orders_spare_part_id_status_remaining_quantity_index';
|
|
|
- $indexes = DB::select("SHOW INDEX FROM spare_part_orders WHERE Key_name = ?", [$indexName]);
|
|
|
- if (!empty($indexes)) {
|
|
|
- $table->dropIndex($indexName);
|
|
|
- }
|
|
|
-
|
|
|
- // Проверяем, есть ли уже новый индекс
|
|
|
- $newIndexName = 'spare_part_orders_spare_part_id_status_available_qty_index';
|
|
|
- $newIndexes = DB::select("SHOW INDEX FROM spare_part_orders WHERE Key_name = ?", [$newIndexName]);
|
|
|
- if (empty($newIndexes)) {
|
|
|
- $table->index(['spare_part_id', 'status', 'available_qty']);
|
|
|
- }
|
|
|
-
|
|
|
- // Включаем обратно
|
|
|
- DB::statement('SET FOREIGN_KEY_CHECKS=1');
|
|
|
- });
|
|
|
+ // Отключаем проверку внешних ключей ДО изменения схемы
|
|
|
+ DB::statement('SET FOREIGN_KEY_CHECKS=0');
|
|
|
+
|
|
|
+ // Проверяем, есть ли уже новый индекс
|
|
|
+ $newIndexName = 'spo_part_status_avail_idx';
|
|
|
+ $newIndexes = DB::select("SHOW INDEX FROM spare_part_orders WHERE Key_name = ?", [$newIndexName]);
|
|
|
+
|
|
|
+ if (empty($newIndexes)) {
|
|
|
+ // Создаём новый индекс с коротким именем
|
|
|
+ DB::statement('CREATE INDEX spo_part_status_avail_idx ON spare_part_orders (spare_part_id, status, available_qty)');
|
|
|
+ }
|
|
|
+
|
|
|
+ // Удаляем старый индекс если существует
|
|
|
+ $oldIndexName = 'spare_part_orders_spare_part_id_status_remaining_quantity_index';
|
|
|
+ $oldIndexes = DB::select("SHOW INDEX FROM spare_part_orders WHERE Key_name = ?", [$oldIndexName]);
|
|
|
+ if (!empty($oldIndexes)) {
|
|
|
+ DB::statement("DROP INDEX `{$oldIndexName}` ON spare_part_orders");
|
|
|
+ }
|
|
|
+
|
|
|
+ // Включаем обратно
|
|
|
+ DB::statement('SET FOREIGN_KEY_CHECKS=1');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -71,13 +71,29 @@ return new class extends Migration
|
|
|
*/
|
|
|
public function down(): void
|
|
|
{
|
|
|
- // Убираем constraint
|
|
|
- DB::statement('ALTER TABLE spare_part_orders DROP CONSTRAINT IF EXISTS chk_available_qty_non_negative');
|
|
|
+ // Убираем constraint (MySQL не поддерживает DROP CONSTRAINT IF EXISTS)
|
|
|
+ try {
|
|
|
+ DB::statement('ALTER TABLE spare_part_orders DROP CHECK chk_available_qty_non_negative');
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ // Constraint не существует, продолжаем
|
|
|
+ }
|
|
|
+
|
|
|
+ DB::statement('SET FOREIGN_KEY_CHECKS=0');
|
|
|
|
|
|
+ // Переименовываем колонку
|
|
|
Schema::table('spare_part_orders', function (Blueprint $table) {
|
|
|
- $table->dropIndex(['spare_part_id', 'status', 'available_qty']);
|
|
|
$table->renameColumn('available_qty', 'remaining_quantity');
|
|
|
- $table->index(['spare_part_id', 'status', 'remaining_quantity']);
|
|
|
});
|
|
|
+
|
|
|
+ // Создаём старый индекс
|
|
|
+ DB::statement('CREATE INDEX spare_part_orders_spare_part_id_status_remaining_quantity_index ON spare_part_orders (spare_part_id, status, remaining_quantity)');
|
|
|
+
|
|
|
+ // Удаляем новый индекс
|
|
|
+ $newIndexes = DB::select("SHOW INDEX FROM spare_part_orders WHERE Key_name = 'spo_part_status_avail_idx'");
|
|
|
+ if (!empty($newIndexes)) {
|
|
|
+ DB::statement('DROP INDEX spo_part_status_avail_idx ON spare_part_orders');
|
|
|
+ }
|
|
|
+
|
|
|
+ DB::statement('SET FOREIGN_KEY_CHECKS=1');
|
|
|
}
|
|
|
};
|