[{"data":1,"prerenderedAt":95},["ShallowReactive",2],{"\u002Fposts\u002Fdatabase-migration-qbsa?{\"username\":\"irezabdullah\"}":3},{"success":4,"message":5,"data":6},true,"Post retrieved successfully",{"post":7,"seriesInfo":25,"seriesItems":28,"seoDescription":94},{"id":8,"title":9,"slug":10,"body":11,"cover_image_path":12,"view_count":13,"part_number":14,"created_at":15,"updated_at":16,"category":17,"author":20},51,"Database & Migration","database-migration-qbsa","### 🎯 Tujuan Pembelajaran\n\nPada akhir pertemuan ini, mahasiswa mampu:\n\n* Memahami konsep **database**, **migration**, dan manfaatnya.\n* Menghubungkan Laravel ke database menggunakan file `.env`.\n* Membuat tabel menggunakan **Laravel Migration**.\n* Menjalankan perintah migration untuk membuat struktur tabel.\n* Memahami struktur folder penting terkait database.\n* Mengatasi error yang sering muncul saat migrasi.\n\n---\n\n#### 1. Konsep Dasar: Apa Itu Migration?\n\nMigration adalah **fitur Laravel untuk mengatur struktur database menggunakan kode**, bukan secara manual lewat phpMyAdmin.\n\n🔑 Migration seperti **version control (Git) untuk database**.\n\nDengan migration, kita bisa:\n\n✔ Membuat tabel \\\n✔ Mengubah tabel \\\n✔ Menambah kolom \\\n✔ Rollback perubahan \\\n✔ Sinkron database di semua komputer tim\n\nContoh situasi nyata:\n\n> *Saat bekerja dalam tim, semua developer harus memiliki struktur tabel yang sama.\n> Migration memastikan hal itu tanpa perlu mengirim file .sql manual.*\n\n---\n\n#### 2. Struktur Dasar Migration\n\nSetiap migration memiliki dua fungsi utama:\n\n###### ✔ `up()`\n\n> Berisi kode untuk membuat atau mengubah tabel.\n\n###### ✔ `down()`\n\n> Berisi kebalikan dari `up()`, biasanya untuk menghapus tabel.\n> Digunakan saat rollback.\n\nContoh migration:\n\n```php\npublic function up(): void\n{\n    Schema::create('products', function (Blueprint $table) {\n        $table->id();\n        $table->string('name');\n        $table->decimal('price', 10, 2);\n        $table->text('description')->nullable();\n        $table->integer('stock')->nullable();\n        $table->string('image')->nullable();\n        $table->timestamps();\n    });\n}\n\npublic function down(): void\n{\n    Schema::dropIfExists('products');\n}\n```\n\n---\n\n####  3. Membuat Database di Laragon\n\n##### **Cara 1: phpMyAdmin**\n\n* Buka: [http:\u002F\u002Flocalhost\u002Fphpmyadmin](http:\u002F\u002Flocalhost\u002Fphpmyadmin)\n* Klik **New Database**\n* Masukkan nama:\n\n```\ncrud_produk_db\n```\n\n##### Cara 2: Terminal MySQL\n\n```bash\nmysql -u root -p\n```\n\nLalu jalankan:\n\n```sql\nCREATE DATABASE crud_produk_db;\nSHOW DATABASES;\n```\n\n---\n\n####  4. Menghubungkan Laravel ke Database\n\nEdit file `.env`:\n\n```env\nDB_DATABASE=crud_produk_db\nDB_USERNAME=root\nDB_PASSWORD=\n```\n\nJika masih tidak terbaca, jalankan:\n\n```bash\nphp artisan config:clear\n```\n\n---\n\n####  5. Membuat Migration Tabel Produk\n\nBuat migration:\n\n```bash\nphp artisan make:migration create_products_table --create=products\n```\n\nEdit file migration:\n\n```php\npublic function up(): void\n{\n    Schema::create('products', function (Blueprint $table) {\n        $table->id();                             \n        $table->string('name');                \n        $table->decimal('price', 10, 2);       \n        $table->text('description')->nullable(); \n        $table->integer('stock')->nullable(); \n        $table->string('image')->nullable();  \n        $table->timestamps();                     \n    });\n}\n```\n\n📸 Penulisan skema database:\n![](https:\u002F\u002Frezweb.my.idhttps:\u002F\u002Fassets-cdn.rezweb.my.id\u002Fcontent\u002F2025-11\u002F5gWV3ZvCVWocZ54z596EdaKnEuJTxAtYcbOvW0wg.png)\n\n---\n\n#### 6. Menjalankan Migration\n\nJalankan:\n\n```bash\nphp artisan migrate\n```\n\nJika berhasil, tabel akan muncul di database.\n\n📸 Cek phpMyAdmin:\n![](https:\u002F\u002Frezweb.my.idhttps:\u002F\u002Fassets-cdn.rezweb.my.id\u002Fcontent\u002F2025-11\u002FXnZ556GphKR7iwhEbBYrArZHfY7LK3Xj0Iqvv3Ef.png)\n\n📸 Detail tabel products:\n![](https:\u002F\u002Frezweb.my.idhttps:\u002F\u002Fassets-cdn.rezweb.my.id\u002Fcontent\u002F2025-11\u002FUC7UIKoGOBk7HixkLSg15nlvIOJUGes15oWT4aTx.png)\n\n📸 Cek via terminal:\n![](https:\u002F\u002Frezweb.my.idhttps:\u002F\u002Fassets-cdn.rezweb.my.id\u002Fcontent\u002F2025-11\u002F7bWrxvVV152olSOQaEZ7UAlYBwLu9U2Jceh4diPl.png)\n\n---\n\n#### 7. Struktur Folder Penting Laravel\n\n```\nproject-laravel\u002F\n├── 📁 app\u002F\n├── 📁 bootstrap\u002F\n├── 📁 config\u002F\n├── 📁 database\u002F\n│   └── 📁 migrations\u002F\n│       └── [timestamp]_create_products_table.php\n├── 📁 public\u002F\n├── 📁 resources\u002F\n├── 📁 routes\u002F\n├── 📁 storage\u002F\n├── 📁 tests\u002F\n└── 📁 vendor\u002F\n```\n\n---\n\n#### ⚠️ 8. Error yang Sering Terjadi & Solusinya\n\n###### ❌ Access denied for user 'root'\n\nCek kembali konfigurasi `.env`.\n\n###### ❌ Base table already exists\n\nGunakan:\n\n```bash\nphp artisan migrate:refresh\n```\n\n###### ❌ Connection refused\n\nPastikan MySQL di Laragon sedang berjalan.\n\n###### ❌ Column not found\n\nLakukan fresh:\n\n```bash\nphp artisan migrate:fresh\n```\n\n---\n\n###  9. Perintah Tambahan Migration (Wajib Diketahui Mahasiswa)\n\n###### Rollback 1 langkah:\n\n```bash\nphp artisan migrate:rollback\n```\n\n###### Refresh (hapus tabel & buat ulang):\n\n```bash\nphp artisan migrate:refresh\n```\n\n###### Fresh (hapus semua tabel, buat ulang dari awal):\n\n```bash\nphp artisan migrate:fresh\n```\n\n---\n\n#### 10. Studi Kasus: Penerapan di Aplikasi\n\n> Pada aplikasi katalog produk, migration memastikan seluruh tim\u002Fdeveloper memiliki struktur tabel yang sama tanpa perlu export\u002Fimport SQL.\n> Cukup pull project → migrate → database siap digunakan.\n\n---","https:\u002F\u002Fcdn.rezweb.my.id\u002Fposts\u002Fg449yKJLQzaAK6cfR27U8PxSq19zjLNyvKgPDQ24.jpg",1066,4,"2025-10-14T16:12:04+07:00","2026-09-07T11:59:38+07:00",{"name":18,"slug":19},"LARAVEL","laravel",{"id":21,"name":22,"username":23,"avatar":24},1,"Irez Abdullah","irezabdullah","https:\u002F\u002Fcdn.rezweb.my.id\u002Favatars\u002Fd139726e-348f-4dab-95c6-bb87e2ad125e.jpeg",{"name":26,"slug":27},"Belajar Laravel dari Nol (Praktikum Web Framework) – Ringkas & Praktis","belajar-laravel-dari-nol-praktikum-web-framework-ringkas-praktis",[29,33,38,43,44,49,54,59,64,69,74,79,84,89],{"id":30,"slug":31,"title":32,"part_number":21},48,"pengenalan-web-framework-instalasi-laravel","Pengenalan Web Framework & Instalasi Laravel",{"id":34,"slug":35,"title":36,"part_number":37},49,"struktur-folder-routing-dasar","Struktur Folder & Routing Dasar",2,{"id":39,"slug":40,"title":41,"part_number":42},50,"blade-template-layouting-dengan-bootstrap-5-dmwo","Blade Template & Layouting dengan Bootstrap 5",3,{"id":8,"slug":10,"title":9,"part_number":14},{"id":45,"slug":46,"title":47,"part_number":48},52,"model-seeder","Model & Seeder",5,{"id":50,"slug":51,"title":52,"part_number":53},53,"controller-read-data-menampilkan-produk","Controller & Read Data (Menampilkan Produk)",6,{"id":55,"slug":56,"title":57,"part_number":58},54,"form-tambah-produk-create","Form Tambah Produk (Create)",7,{"id":60,"slug":61,"title":62,"part_number":63},55,"edit-update-produk","Edit & Update Produk",8,{"id":65,"slug":66,"title":67,"part_number":68},56,"hapus-produk-validasi-form","Hapus Produk & Validasi Form",9,{"id":70,"slug":71,"title":72,"part_number":73},63,"upload-file-gambar-dan-validasi-cpw3","Upload File (Gambar) dan Validasi",10,{"id":75,"slug":76,"title":77,"part_number":78},62,"menampilkan-grafik-stok-produk","Menampilkan Grafik Stok Produk",11,{"id":80,"slug":81,"title":82,"part_number":83},64,"login-dan-implementasi-middleware-at","Login Dan Implementasi Middleware",12,{"id":85,"slug":86,"title":87,"part_number":88},61,"membuat-dashboard-admin-dengan-statistik-dan-grafik","Membuat Dashboard Admin dengan Statistik dan Grafik",13,{"id":90,"slug":91,"title":92,"part_number":93},65,"teknik-debugging-di-laravel","Teknik Debugging di Laravel",15,"🎯 Tujuan Pembelajaran Pada akhir pertemuan ini, mahasiswa mampu: Memahami konsep database, migration**, dan manfaatnya. Menghubungkan Laravel ke database mengg...",1788757407271]