# Panduan Migrations Laravel

## Status Migrations

Sistem ini menggunakan **2 metode** untuk setup database:

### Metode 1: Import SQL Manual (Sudah Ada)
- File: `database/import_phpmyadmin.sql`
- Import langsung ke phpMyAdmin
- **TIDAK perlu menjalankan migrations**

### Metode 2: Laravel Migrations (Baru)
- File: `database/migrations/*.php`
- Jalankan: `php artisan migrate`
- **Hanya jika database belum ada**

**Tabel cache**: Jika aplikasi memakai cache driver database, tabel `cache` dan `cache_locks` wajib ada. Migrasi: `2026_01_19_210100_create_cache_table.php`. Jika error "Table 'cache' doesn't exist", jalankan:
```bash
php artisan migrate --path=database/migrations/2026_01_19_210100_create_cache_table.php --force
```

## ⚠️ PENTING

**Jika database sudah diimport manual:**
- JANGAN jalankan `php artisan migrate`
- Database sudah lengkap dengan semua tabel
- Migrations hanya untuk setup baru

**Jika database belum ada:**
- Pilih salah satu:
  1. Import `database/import_phpmyadmin.sql` (Recommended)
  2. Atau jalankan `php artisan migrate`

## Cara Menandai Migrations Sudah Dijalankan

Jika database sudah diimport manual tapi ingin menandai migrations sebagai sudah dijalankan:

```sql
-- Jalankan di phpMyAdmin
INSERT INTO migrations (migration, batch) VALUES
('2024_01_01_000001_create_users_table', 1),
('2024_01_01_000002_create_user_profiles_table', 1),
('2024_01_01_000003_create_pegawai_table', 1),
('2024_01_01_000004_create_absensi_table', 1),
('2024_01_01_000005_create_cuti_table', 1),
('2024_01_01_000006_create_penilaian_kinerja_table', 1),
('2024_01_01_000007_create_sessions_table', 1),
('2024_01_01_000008_create_audit_logs_table', 1),
('2024_01_01_000009_create_permissions_table', 1),
('2024_01_01_000010_create_role_permissions_table', 1),
('2024_01_01_000011_create_password_reset_tokens_table', 1),
('2024_01_01_000012_create_notifications_table', 1);
```

## Struktur Migrations

12 migrations files:
1. `create_users_table` - Tabel users
2. `create_user_profiles_table` - Tabel user_profiles
3. `create_pegawai_table` - Tabel pegawai
4. `create_absensi_table` - Tabel absensi
5. `create_cuti_table` - Tabel cuti
6. `create_penilaian_kinerja_table` - Tabel penilaian_kinerja
7. `create_sessions_table` - Tabel sessions (Laravel format)
8. `create_audit_logs_table` - Tabel audit_logs
9. `create_permissions_table` - Tabel permissions
10. `create_role_permissions_table` - Tabel role_permissions
11. `create_password_reset_tokens_table` - Tabel password_reset_tokens
12. `create_notifications_table` - Tabel notifications

## Troubleshooting

### Error: "Table 'cache' doesn't exist" (SQLSTATE[42S02])
**Penyebab**: Aplikasi memakai cache driver `database` tetapi tabel `cache` belum dibuat.

**Solusi** (pilih salah satu):

1. **Hanya buat tabel cache** (jika tabel lain sudah ada):
   ```bash
   php artisan migrate --path=database/migrations/2026_01_19_210100_create_cache_table.php --force
   ```

2. **Jalankan semua migration yang belum** (jika ada tabel lain yang kurang):
   ```bash
   php artisan migrate --force
   ```

3. **Setup database dari awal** (database kosong):
   ```bash
   php artisan migrate:fresh --seed
   ```
   *(Perhatian: ini akan menghapus semua data dan membuat ulang database.)*

### Error: "Table already exists"
**Solusi**: Database sudah ada, skip migrations atau tandai sebagai sudah dijalankan. Jika hanya tabel `cache` yang kurang, jalankan migrasi cache saja (lihat poin di atas).

### Error: "Column not found"
**Solusi**: 
1. Pastikan database sudah diimport
2. Atau jalankan migrations: `php artisan migrate`

### Error: "Foreign key constraint fails"
**Solusi**: Pastikan urutan migrations benar (users dulu, baru yang lain)

