Jika terjadi error foreign key constraint saat menjalankan migration, ikuti langkah berikut: CARA 1: Rollback dan Jalankan Ulang (Jika migration belum selesai) 1. Rollback migration yang error: php artisan migrate:rollback --step=1 2. Pastikan semua data di tabel targets sudah memiliki kolom 'nama' (jika migration add_nama_to_targets_table sudah dijalankan) 3. Jalankan migration lagi: php artisan migrate CARA 2: Perbaiki Manual di Database (Jika migration sudah berjalan sebagian) 1. Cek status migration: php artisan migrate:status 2. Jika kolom target_id sudah ditambahkan tapi foreign key belum, jalankan query SQL berikut di database: -- Hapus foreign key jika sudah ada (tapi error) ALTER TABLE capaians DROP FOREIGN KEY IF EXISTS capaians_target_id_foreign; -- Isi target_id untuk data yang cocok UPDATE capaians c INNER JOIN ( SELECT MIN(id) as id, direktorat_id, tahun FROM targets GROUP BY direktorat_id, tahun ) t ON c.direktorat_id = t.direktorat_id AND c.tahun = t.tahun SET c.target_id = t.id WHERE c.target_id IS NULL; -- Hapus data capaian yang tidak memiliki target yang cocok DELETE FROM capaians WHERE target_id IS NULL; -- Ubah kolom menjadi NOT NULL ALTER TABLE capaians MODIFY target_id BIGINT UNSIGNED NOT NULL; -- Tambahkan foreign key constraint ALTER TABLE capaians ADD CONSTRAINT capaians_target_id_foreign FOREIGN KEY (target_id) REFERENCES targets(id) ON DELETE CASCADE; -- Hapus kolom tahun (jika masih ada) ALTER TABLE capaians DROP COLUMN IF EXISTS tahun; 3. Setelah itu, tandai migration sebagai sudah dijalankan: php artisan migrate --pretend (cek apakah ada migration yang masih pending, jika tidak ada, update tabel migrations secara manual) Catatan: - Migration yang diperbaiki akan: 1. Menambahkan kolom target_id sebagai nullable 2. Mengisi target_id berdasarkan tahun dan direktorat_id yang cocok (ambil target pertama jika ada multiple) 3. Menghapus data capaian yang tidak memiliki target yang cocok 4. Mengubah kolom menjadi NOT NULL 5. Menambahkan foreign key constraint 6. Menghapus kolom tahun