diff --git a/database/migrations/2026_05_25_220000_sync_dns_server_references_and_add_foreign_keys.php b/database/migrations/2026_05_25_220000_sync_dns_server_references_and_add_foreign_keys.php index 04f7f19..790232b 100644 --- a/database/migrations/2026_05_25_220000_sync_dns_server_references_and_add_foreign_keys.php +++ b/database/migrations/2026_05_25_220000_sync_dns_server_references_and_add_foreign_keys.php @@ -10,15 +10,24 @@ return new class extends Migration $serverId = $this->resolveCanonicalServerId(); if ($serverId === null) { - throw new RuntimeException('Không tìm thấy dns_manager_servers để sync foreign key.'); - } + $hasOrphaned = DB::table('dns_manager_domain as d') + ->leftJoin('dns_manager_servers as s', 's.id', '=', 'd.dns_manager_server_id') + ->where(function ($q) { + $q->where('d.dns_manager_server_id', 0)->orWhereNull('s.id'); + }) + ->exists(); - DB::statement(" - UPDATE dns_manager_domain d - LEFT JOIN dns_manager_servers s ON s.id = d.dns_manager_server_id - SET d.dns_manager_server_id = {$serverId} - WHERE d.dns_manager_server_id = 0 OR s.id IS NULL - "); + if ($hasOrphaned) { + throw new RuntimeException('Không tìm thấy dns_manager_servers để sync foreign key cho các bản ghi orphaned.'); + } + } else { + DB::statement(" + UPDATE dns_manager_domain d + LEFT JOIN dns_manager_servers s ON s.id = d.dns_manager_server_id + SET d.dns_manager_server_id = {$serverId} + WHERE d.dns_manager_server_id = 0 OR s.id IS NULL + "); + } DB::statement('ALTER TABLE dns_manager_domain MODIFY dns_manager_server_id BIGINT UNSIGNED NOT NULL'); DB::statement('ALTER TABLE dns_manager_ns MODIFY dns_manager_domain_id BIGINT UNSIGNED NOT NULL');