3.6 KiB
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_kelasdankelassudah ada data - Pastikan
is_active = truepada kelompok & kelas
Dropdown kelas tidak muncul saat edit
- Pastikan relasi
kelasPrimarysudah ter-load: controller harus$santri->load('kelasPrimary.kelas.kelompok')
Kolom kelas masih ada di database
- Jalankan
php artisan migrateuntuk 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()