{"id":51133527,"url":"https://github.com/xnuvers007/php-native-migrator","last_synced_at":"2026-06-25T15:01:28.483Z","repository":{"id":355770361,"uuid":"1229510625","full_name":"Xnuvers007/php-native-migrator","owner":"Xnuvers007","description":"A powerful, 100% dependency-free, framework-agnostic database migration and seeding engine for native PHP projects. Bring Laravel's elegant schema builder and CLI automation to your raw PHP code! 🚀","archived":false,"fork":false,"pushed_at":"2026-05-05T06:58:00.000Z","size":62,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-05T08:16:16.713Z","etag":null,"topics":["cli","database","database-migration","framework-agnostic","laravel-inspired","migration","mysql","php","php-native","schema-builder","seeder","sqlite","zero-dependencies"],"latest_commit_sha":null,"homepage":"https://github.com/Xnuvers007/php-native-migrator","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Xnuvers007.png","metadata":{"files":{"readme":"README-id.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-05T05:46:06.000Z","updated_at":"2026-05-05T06:54:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Xnuvers007/php-native-migrator","commit_stats":null,"previous_names":["xnuvers007/php-native-migrator"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/Xnuvers007/php-native-migrator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xnuvers007%2Fphp-native-migrator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xnuvers007%2Fphp-native-migrator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xnuvers007%2Fphp-native-migrator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xnuvers007%2Fphp-native-migrator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Xnuvers007","download_url":"https://codeload.github.com/Xnuvers007/php-native-migrator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xnuvers007%2Fphp-native-migrator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34780126,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-25T02:00:05.521Z","response_time":101,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","database","database-migration","framework-agnostic","laravel-inspired","migration","mysql","php","php-native","schema-builder","seeder","sqlite","zero-dependencies"],"created_at":"2026-06-25T15:01:26.713Z","updated_at":"2026-06-25T15:01:28.471Z","avatar_url":"https://github.com/Xnuvers007.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg\" width=\"200\" alt=\"PHP Native Migrator\" style=\"filter: hue-rotate(220deg);\"/\u003e\n  \u003ch1\u003e🚀 PHP Native Migrator v2.1\u003c/h1\u003e\n  \u003cp\u003e\u003cb\u003eBawa kecanggihan Migration \u0026 Seeding ala Laravel ke proyek PHP murni Anda!\u003c/b\u003e\u003c/p\u003e\n  \n  [![PHP Version](https://img.shields.io/badge/PHP-%E2%89%A5%208.0-777BB4?style=for-the-badge\u0026logo=php\u0026logoColor=white)](https://php.net)\n  [![MySQL](https://img.shields.io/badge/MySQL-%E2%89%A5%205.7-4479A1?style=for-the-badge\u0026logo=mysql\u0026logoColor=white)](https://mysql.com)\n  [![SQLite](https://img.shields.io/badge/SQLite-3-003B57?style=for-the-badge\u0026logo=sqlite\u0026logoColor=white)](https://sqlite.org)\n  [![License](https://img.shields.io/badge/License-MIT-green.svg?style=for-the-badge)](https://opensource.org/licenses/MIT)\n  [![No Dependencies](https://img.shields.io/badge/Dependencies-0-success?style=for-the-badge)](#)\n  [![Security](https://img.shields.io/badge/Security-Military_Grade-red?style=for-the-badge\u0026logo=security\u0026logoColor=white)](#)\n\n  \u003cp\u003e\n    \u003ca href=\"README.md\"\u003e\u003cb\u003e🇺🇸 Read in English\u003c/b\u003e\u003c/a\u003e •\n    \u003ca href=\"#-daftar-isi\"\u003e\u003cb\u003eDokumentasi\u003c/b\u003e\u003c/a\u003e •\n    \u003ca href=\"#-panduan-cepat-quick-start\"\u003e\u003cb\u003eMulai Cepat\u003c/b\u003e\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n---\n\nPusing harus bolak-balik buka phpMyAdmin untuk *export/import* file `.sql` secara manual? Sedang mengerjakan proyek PHP *Native* (atau sistem *legacy* lama) tapi merindukan otomasi *database* yang rapi dan elegan seperti di Laravel?\n\n**PHP Native Migrator** adalah *engine* migrasi dan seeder database yang **100% mandiri dan tanpa Framework**. Proyek ini tidak butuh Composer, tidak butuh *library* dari luar, dan berjalan sangat cepat. Cukup *drag and drop* ke dalam proyek Anda, atur koneksi, dan mulailah mengelola *database* lewat terminal!\n\n---\n\n## 📑 Daftar Isi\n\n- [✨ Fitur Unggulan](#-fitur-unggulan)\n- [❓ Kenapa Pilih Alat Ini?](#-kenapa-pilih-alat-ini)\n- [📥 Instalasi](#-instalasi-cukup-drag--drop)\n- [🚀 Panduan Cepat](#-panduan-cepat-quick-start)\n- [🏗️ Referensi Schema Builder](#️-referensi-schema-builder-api)\n- [🌱 Sistem Seeding](#-sistem-database-seeding)\n- [🛠️ Daftar Lengkap Perintah](#️-daftar-lengkap-perintah-cli-commands)\n- [🛡️ Arsitektur Keamanan](#️-arsitektur-keamanan-lapis-baja)\n- [📂 Struktur Folder](#-struktur-folder)\n\n---\n\n## ✨ Fitur Unggulan\n\n*   **🏗️ Fluent Schema Builder**: Tulis tabel database menggunakan sintaks PHP yang cantik dan berantai (contoh: `$table-\u003estring('email')-\u003eunique();`). Selamat tinggal error _syntax_ SQL mentah!\n*   **🤖 Auto-Discovery Seeders**: Buat data palsu/awal tanpa ribet. Semua Seeder otomatis terdeteksi dari folder `seeders` dan dieksekusi sesuai urutan abjad.\n*   **🎨 CLI yang Cantik**: Antarmuka terminal interaktif, penuh warna, dan punya deteksi salah ketik (*typo*) layaknya alat profesional.\n*   **🗄️ Multi-Driver**: Mendukung penuh **MySQL / MariaDB** dan **SQLite** dengan kompilasi otomatis di belakang layar.\n*   **🔄 Rollback \u0026 Reset**: Lakukan kesalahan saat membuat tabel? Cukup lakukan *rollback* state database Anda per *batch* atau per langkah.\n*   **🛡️ Keamanan Kelas Militer**: Proteksi bawaan terhadap serangan SQL Injection (PDO Prepared Statements), Path Traversal (PathGuard), dan Command/RCE Injection (Sanitizer).\n*   **📦 Nol Dependensi**: Dibangun murni menggunakan PHP murni. Taruh di mana saja, dan pasti langsung jalan.\n\n---\n\n## ❓ Kenapa Pilih Alat Ini?\n\nDi dunia *web development* modern, Framework seperti Laravel atau Symfony menyediakan ORM dan sistem migrasi yang luar biasa. Namun, bagaimana jika Anda:\n1. Sedang me- *maintain* aplikasi PHP kuno (*legacy*)?\n2. Sedang membuat API super ringan menggunakan PHP murni tanpa mau dibebani Framework raksasa?\n3. Sedang belajar bagaimana mesin kompilasi *database* (Schema Builder) bekerja di belakang layar?\n\nMeng- *install* Doctrine atau Eloquent via Composer ke proyek PHP murni seringkali membawa puluhan *dependency* ekstra yang memberatkan. **PHP Native Migrator memberikan Anda pengalaman Migrasi dan CLI persis seperti Laravel dengan ukuran ekstra 0 bytes dari pihak ketiga!**\n\n---\n\n## 📥 Instalasi (Cukup Drag \u0026 Drop)\n\n1. **Download** repositori ini dari Github.\n2. **Copy** semua file dan folder langsung ke folder *root* proyek PHP Anda.\n3. **Ubah nama** `.env.example` menjadi `.env`.\n4. **Konfigurasikan** akses database Anda di file `.env`.\n\nSelesai! Buka Terminal/CMD Anda dan ketik `php artisan list` untuk melihat keajaibannya.\n\n---\n\n## 🚀 Panduan Cepat (Quick Start)\n\n### 1. Atur `.env` Anda\n```env\nDB_DRIVER=mysql\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_DATABASE=aplikasi_keren_saya\nDB_USERNAME=root\nDB_PASSWORD=rahasia\n```\n\n### 2. Buat File Migrasi\n```bash\nphp artisan make:migration create_users_table\n```\nPerintah ini akan membuat file pintar bernama *timestamp* di dalam folder `migrations/` (cth: `m20260505_120000_create_users_table.php`).\n\n### 3. Tulis Kolom Anda (Schema)\nBuka file yang baru dibuat tadi. Sistem akan otomatis mendeteksi bahwa Anda ingin membuat tabel `users` dan menyiapkan kerangkanya!\n```php\npublic function up(PDO $pdo): void\n{\n    Schema::create('users', function (Blueprint $table) {\n        $table-\u003eid();                                    // BIGINT PRIMARY KEY AUTO_INCREMENT\n        $table-\u003estring('username', 50)-\u003eunique();        // VARCHAR(50) UNIK\n        $table-\u003estring('email')-\u003eunique();               // VARCHAR(255) UNIK\n        $table-\u003eenum('role', ['admin', 'user']);         // ENUM\n        $table-\u003eboolean('is_active')-\u003edefault(true);     // TINYINT(1) DEFAULT 1\n        $table-\u003etimestamps();                            // created_at \u0026 updated_at\n    });\n}\n\npublic function down(PDO $pdo): void\n{\n    Schema::dropIfExists('users');\n}\n```\n\n### 4. Migrate!\n```bash\nphp artisan migrate\n```\nTabel Anda kini sudah berhasil terbuat dengan aman di *database*. Anda dapat melihat status antreannya menggunakan `php artisan migrate:status`.\n\n---\n\n## 🏗️ Referensi Schema Builder API\n\nObjek `$table` menyediakan banyak sekali tipe data untuk keperluan Anda.\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cb\u003e🔥 Tipe Kolom Populer\u003c/b\u003e\u003c/summary\u003e\n\n| Perintah | Tipe Database | Deskripsi |\n|--------|--------------|-------------|\n| `$table-\u003eid()` | `BIGINT` | Primary key yang berurut otomatis |\n| `$table-\u003estring('name', 100)` | `VARCHAR(100)` | Teks dengan batasan (default 255) |\n| `$table-\u003etext('desc')` | `TEXT` | Teks standar panjang |\n| `$table-\u003elongText('body')` | `LONGTEXT` | Teks super panjang (artikel) |\n| `$table-\u003einteger('qty')` | `INT` | Angka bulat standar |\n| `$table-\u003ebigInteger('views')`| `BIGINT` | Angka bulat yang sangat besar |\n| `$table-\u003edecimal('price', 8, 2)`| `DECIMAL(8,2)` | Angka desimal (biasanya untuk uang) |\n| `$table-\u003eboolean('active')` | `TINYINT(1)` | Nilai benar/salah (True/False) |\n| `$table-\u003edate('birthday')` | `DATE` | Tanggal tanpa jam |\n| `$table-\u003edateTime('login')` | `DATETIME` | Tanggal beserta jam |\n| `$table-\u003ejson('data')` | `JSON` | Format teks JSON |\n| `$table-\u003eenum('role', ['A','B'])`| `ENUM` | Nilai pilihan terbatas |\n| `$table-\u003euuid('uuid')` | `CHAR(36)` | String acak UUID |\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cb\u003e✨ Sifat Kolom (Modifiers)\u003c/b\u003e\u003c/summary\u003e\n\nModifiers ini bisa disambung di belakang tipe data.\n```php\n$table-\u003estring('phone')-\u003enullable();           // Boleh dikosongkan (NULL)\n$table-\u003einteger('age')-\u003eunsigned();            // Angka harus positif\n$table-\u003estring('status')-\u003edefault('pending');  // Beri nilai otomatis\n$table-\u003estring('email')-\u003eunique();             // Data tidak boleh sama (Unik)\n$table-\u003estring('bio')-\u003eafter('email');         // Taruh di sebelah kolom (Khusus MySQL)\n$table-\u003estring('id')-\u003efirst();                 // Taruh di paling awal tabel\n$table-\u003estring('title')-\u003ecomment('App Title'); // Tambahkan komentar di database\n```\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cb\u003e🔗 Relasi Antar Tabel (Foreign Keys)\u003c/b\u003e\u003c/summary\u003e\n\nKaitkan antar tabel dengan efek hapus/ubah otomatis.\n```php\n$table-\u003eforeignId('department_id'); // Otomatis membuat BIGINT UNSIGNED\n\n$table-\u003eforeign('department_id')\n      -\u003ereferences('id')\n      -\u003eon('departments')\n      -\u003ecascadeOnDelete()           // Hapus ini jika department dihapus\n      -\u003enullOnUpdate();             // Kosongkan ini jika department diubah\n```\n\u003c/details\u003e\n\n---\n\n## 🌱 Sistem Database Seeding\n\nSeeder memudahkan Anda mengisi data palsu atau admin tanpa *insert* manual.\n\n### 1. Buat File Seeder\n```bash\nphp artisan make:seeder ProductSeeder\n```\n\n### 2. Tulis Data (Gunakan asisten super aman)\n```php\nclass ProductSeeder\n{\n    public function run(PDO $pdo): void\n    {\n        // Masukkan 1 baris\n        Database::insert('products', [\n            'nama'  =\u003e 'Kopi Susu',\n            'harga' =\u003e 15000,\n            'stok'  =\u003e 100\n        ]);\n\n        // Masukkan banyak baris sekaligus\n        Database::insertMany('products', ['nama', 'harga', 'stok'], [\n            ['Teh Hijau', 10000, 50],\n            ['Susu Coklat', 18500, 30]\n        ]);\n        \n        // Bungkus pakai transaksi agar sangat aman!\n        Database::transaction(function ($pdo) {\n             Database::insert('categories', ['nama' =\u003e 'Minuman']);\n        });\n    }\n}\n```\n\n### 3. Eksekusi\nJalankan saja:\n```bash\nphp artisan db:seed\n```\n*Catatan: Sistem akan mendeteksi file Seeder Anda dan menjalankannya secara berurutan!*\n\n---\n\n## 🛠️ Daftar Lengkap Perintah (CLI Commands)\n\n| Perintah | Deskripsi |\n|---------|--------|\n| `php artisan migrate` | Mengeksekusi seluruh migrasi yang tertunda |\n| `php artisan migrate:status` | Menampilkan tabel ASCII status tiap file |\n| `php artisan migrate:rollback` | Membatalkan *batch* terakhir yang dikerjakan |\n| `php artisan migrate:rollback --step=N`| Membatalkan spesifik tepat `N` file |\n| `php artisan migrate:reset` | Membatalkan/menghapus semua migrasi |\n| `php artisan migrate:refresh` | Mereset dan menjalankan migrasi ulang |\n| `php artisan migrate:fresh` | **Hapus semua tabel** dan kerjakan migrasi ulang |\n| `php artisan migrate:fresh --seed` | Hapus tabel, migrate ulang, dan jalankan seeder |\n| `php artisan make:migration Name` | Buat file cetakan migrasi baru |\n| `php artisan make:seeder Name` | Buat file data seeder baru |\n| `php artisan db:seed` | Eksekusi seluruh seeder yang ditemukan otomatis |\n| `php artisan db:wipe` | Menghapus semua tabel (Tanpa menjalankan migrasi lagi) |\n\n---\n\n## 🛡️ Arsitektur Keamanan Lapis Baja\n\nMembangun alat berbasis terminal dengan PHP berisiko tinggi terhadap eksploitasi server. Alat ini dirancang dengan pengamanan lapis ganda:\n\n1. **Proteksi SQL Injection**: Sistem asisten penambah data (`Database::insert` \u0026 `insertMany`) tidak menempelkan data mentah. Secara otomatis semuanya dialihkan ke **PDO Prepared Statements**. \n2. **Penangkal Path Traversal \u0026 LFI**: \n   - Class `PathGuard` mencegah pemuatan file asing.\n   - Menggugurkan injeksi Karakter Kosong / Null Byte (`\\0`).\n   - Secara fisik memvalidasi alamat path memakai `realpath()`, memastikan tak ada *Hacker* yang memanggil file `../../../etc/passwd` alih-alih `migrations/`.\n3. **Penangkal Remote Code Execution (RCE)**: \n   - Karena generator membuat nama *class* dan menyimpannya ke file, maka *input* dari pengguna dibersihkan secara ekstrem oleh `Sanitizer`. Pemblokiran dilakukan jika terdeteksi penggunaan `eval()`, *backticks* (\\`), atau tag eksekusi PHP pada *parameter command*.\n4. **Isolasi Variabel (*Environment*)**: Menjamin isi file `.env` sistem operasi komputer Anda tidak tertimpa oleh *parser* `.env` aplikasi.\n\n---\n\n## 📂 Struktur Folder\n\nUntuk apa saja file aslinya digunakan?\n\n```text\n├── core/\n│   ├── Bootstrap.php          # Pemuat Class (Autoloader) tanpa Composer\n│   ├── Database.php           # Konektor PDO \u0026 Generator Query yang aman\n│   ├── DotEnv.php             # Pembaca .env yang anti jebol\n│   ├── Migrator.php           # Mesin utama Migrasi \u0026 Batching\n│   ├── Seeder.php             # Mesin utama Seeder \u0026 Pencarian File Otomatis\n│   ├── Console/               # Router Terminal \u0026 Penampil Tabel/Warna\n│   ├── Schema/                # Jantung Schema Builder \u0026 Bahasa MySQL/SQLite\n│   └── Security/              # Pengawal PathGuard dan Sanitizer (Anti Hack)\n```\n*(Anda hampir tidak akan pernah perlu menyentuh file di dalam folder `core/`. Biarkan mereka yang mengurusi sihir ajaibnya di belakang layar!)*\n\n---\n\n## 🤝 Berkontribusi \u0026 Lisensi\n\nSilakan sumbangkan kode, buka permasalahan (*issue*), atau salin repositori ini secara bebas!\nPerangkat lunak ini dikembangkan terbuka di bawah payung lisensi **[MIT license](https://opensource.org/licenses/MIT)**.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cb\u003eDibuat dengan ❤️ menggunakan 100% PHP Native • Dilarang Keras Pakai Framework\u003c/b\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxnuvers007%2Fphp-native-migrator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxnuvers007%2Fphp-native-migrator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxnuvers007%2Fphp-native-migrator/lists"}