MIF_E31230892/sim-pkpps/PANDUAN_MIGRASI_KELAS.md

3.6 KiB

PANDUAN MIGRASI SISTEM KELAS BARU

Ringkasan

Migrasi dari kolom kelas hardcoded (PB, Lambatan, Cepatan) di tabel santris ke sistem relasional baru menggunakan tabel santri_kelas, kelas, dan kelompok_kelas.

Prasyarat

Pastikan tabel berikut sudah ada dan terisi data:

  • kelompok_kelas — minimal 3 kelompok (PB, Lambatan, Cepatan)
  • kelas — minimal 1 kelas aktif per kelompok

Cek via tinker:

cd sim-pkpps
php artisan tinker
>>> App\Models\KelompokKelas::active()->count()  # harus >= 3
>>> App\Models\Kelas::active()->count()            # harus >= 3

Urutan Eksekusi (Step-by-Step)

TAHAP 1: Migrasi Data (Kolom Lama → Tabel Baru)

cd sim-pkpps

# 1. Preview dulu (dry-run) — TIDAK mengubah database
php artisan migrate:santri-kelas-full --dry-run

# 2. Periksa output, pastikan mapping benar:
#    PB       → KLS00x (...)
#    Lambatan → KLS00x (...)
#    Cepatan  → KLS00x (...)

# 3. Execute migrasi data (real)
php artisan migrate:santri-kelas-full

# 4. Validasi: Periksa tabel santri_kelas sudah terisi
php artisan tinker
>>> App\Models\SantriKelas::where('is_primary', true)->count()

TAHAP 2: Test Aplikasi

Setelah TAHAP 1, kode sudah diupdate untuk pakai relasi baru.

Buka browser dan test:

  • Index: Buka halaman Data Santri → Filter kelompok kelas berfungsi
  • Create: Tambah santri baru → Pilih kelompok → Pilih kelas → Simpan
  • Edit: Edit santri existing → Kelas otomatis terseleksi → Update
  • Show: Detail santri → Kelompok & Kelas tampil benar
  • Delete: Hapus santri → Tidak error
  • Foto: Upload foto masih berfungsi normal

TAHAP 3: Drop Kolom Lama

SETELAH semua test di TAHAP 2 pass:

# Backup database dulu!
mysqldump -u root sim_pkpps > backup_before_drop_kelas.sql

# Jalankan migration drop kolom
php artisan migrate

# Test lagi semua fitur

Jika perlu rollback:

php artisan migrate:rollback --step=1

File yang Diubah

File Perubahan
app/Console/Commands/MigrateSantriToNewKelas.php BARU — Command migrasi data
app/Models/Santri.php Hapus kelas dari fillable, simplify accessor, tambah scope
app/Http/Controllers/Admin/SantriController.php Semua method: pakai relasi baru + eager loading
resources/views/admin/santri/form.blade.php Dropdown bertingkat Kelompok → Kelas (vanilla JS)
resources/views/admin/santri/index.blade.php Filter kelompok + kelas dari relasi di tabel
resources/views/admin/santri/show.blade.php Tampil kelompok + kelas dari relasi
database/migrations/2026_02_14_..._drop_kelas.php BARU — Drop kolom kelas dari santris

Troubleshooting

Error: "Kelas wajib dipilih" saat create/edit

  • Pastikan tabel kelompok_kelas dan kelas sudah ada data
  • Pastikan is_active = true pada kelompok & kelas

Dropdown kelas tidak muncul saat edit

  • Pastikan relasi kelasPrimary sudah ter-load: controller harus $santri->load('kelasPrimary.kelas.kelompok')

Kolom kelas masih ada di database

  • Jalankan php artisan migrate untuk menjalankan migration drop kolom
  • Atau jalankan manual: ALTER TABLE santris DROP COLUMN kelas;

Rollback penuh

# 1. Rollback drop kolom
php artisan migrate:rollback --step=1

# 2. Restore kode lama dari git
git checkout -- app/Models/Santri.php
git checkout -- app/Http/Controllers/Admin/SantriController.php
git checkout -- resources/views/admin/santri/

# 3. Bersihkan santri_kelas jika perlu
php artisan tinker
>>> App\Models\SantriKelas::truncate()