%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
# Migrasi Database Perubahan **struktur** database dilakukan lewat berkas migrasi di folder ini, lalu dijalankan dengan satu perintah. Aman diulang: tiap migrasi yang sukses dicatat di tabel `schema_migrations` dan tidak dijalankan dua kali. > Baseline (instalasi baru) tetap dari `database/ppid_mateng.sql`. > Migrasi hanya untuk **perubahan setelah** baseline. ## Alur kerja **1. Buat berkas migrasi baru** (di lokal): ```bash php scripts/migrate.php make "tambah kolom telepon ke upd" ``` Menghasilkan `migrations/20260725_143000_tambah_kolom_telepon_ke_upd.sql`. Isi berkas itu dengan SQL Anda, mis.: ```sql ALTER TABLE `upd` ADD COLUMN `telepon` VARCHAR(30) NULL AFTER `email`; ``` **2. Uji di lokal:** ```bash php scripts/migrate.php # jalankan php scripts/migrate.php status # cek status ``` **3. Commit & push:** ```bash git add migrations/ && git commit -m "Migrasi: tambah kolom telepon" && git push ``` **4. Di server** (setelah `git pull`): ```bash php scripts/migrate.php ``` ## Perintah | Perintah | Fungsi | |---|---| | `php scripts/migrate.php` | Jalankan semua migrasi yang tertunda | | `php scripts/migrate.php status` | Lihat mana yang sudah / tertunda | | `php scripts/migrate.php make "judul"` | Buat berkas migrasi baru berprefiks timestamp | ## Aturan penulisan migrasi - **Satu perubahan = satu berkas.** Jangan mengubah berkas migrasi yang sudah pernah dijalankan (di server) — buat berkas baru. - Pisahkan tiap pernyataan dengan `;`. - **Jangan** memuat data pribadi di migrasi (berkas ini masuk repo). - **Jangan** pakai `DROP TABLE`/`DROP COLUMN` tanpa yakin — itu menghapus data. - Pernyataan DDL MySQL (`ALTER`/`CREATE`) **auto-commit** — bila satu migrasi memuat beberapa pernyataan dan gagal di tengah, sebagian bisa sudah terpasang. Buat migrasi kecil & fokus agar mudah dipulihkan. - **Jangan** gunakan trigger / stored procedure dengan `DELIMITER` kustom (penjalan ini memisah pernyataan berdasarkan `;`).