> For the complete documentation index, see [llms.txt](https://learn.devlabss.my.id/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://learn.devlabss.my.id/laravel/bab-5-migration-and-seeder/5.5-penjelasan-perintah-migrate-fresh.md).

# 5.5 Penjelasan Perintah migrate:fresh

## Penjelasan perintah `migrate:fresh`

Saat struktur tabel berubah, file migration kadang ikut Anda ubah.

Masalahnya, perintah `php artisan migrate` tidak selalu membaca ulang file yang sudah pernah dijalankan.

Di titik ini, Anda perlu memahami `migrate:fresh`.

### Kenapa muncul `Nothing to migrate`

Laravel menyimpan riwayat migration di tabel `migrations`.

Setelah sebuah migration pernah dijalankan, Laravel menganggap file itu sudah selesai diproses.

Karena itu, saat Anda mengubah isi file lama lalu menjalankan:

```bash
php artisan migrate
```

Laravel bisa menampilkan:

```
Nothing to migrate.
```

Artinya bukan file Anda salah.

Artinya Laravel tidak membaca ulang migration lama itu.

### Apa yang dilakukan `migrate:fresh`

Perintah ini akan:

1. menghapus semua tabel di database
2. menjalankan semua migration dari awal
3. mengembalikan struktur tabel sesuai isi file terbaru

Jika ditambah `--seed`, Laravel juga langsung mengisi data dummy lagi.

### Kapan perintah ini dipakai

Gunakan `migrate:fresh` saat:

* Anda masih di tahap belajar atau development lokal
* struktur tabel berubah dan ingin dibangun ulang dari nol
* data lama tidak masalah untuk dihapus

Jangan gunakan perintah ini di server produksi.

### Praktik memperbarui struktur tabel

Di contoh ini, Anda akan menambah kolom `kategori` ke tabel `buku`.

{% stepper %}
{% step %}

### Ubah file migration

Buka file migration tabel `buku`.

Lalu ubah method `up()` menjadi seperti ini:

```php
public function up(): void
{
    Schema::create('buku', function (Blueprint $table) {
        $table->id();
        $table->string('judul');
        $table->string('penulis');
        $table->string('penerbit');
        $table->string('kategori');
        $table->integer('tahun_terbit');
        $table->timestamps();
    });
}
```

Lalu simpan file.
{% endstep %}

{% step %}

### Sesuaikan data pada seeder

Karena tabel punya kolom baru, data seed juga harus ikut diperbarui.

Tambahkan `kategori` pada setiap data buku:

```php
DB::table('buku')->insert([
    [
        'judul' => 'Belajar Laravel 11 untuk Pemula',
        'penulis' => 'Ahmad RPL',
        'penerbit' => 'Informatika SMK',
        'kategori' => 'Teknologi',
        'tahun_terbit' => 2024,
        'created_at' => now(),
        'updated_at' => now(),
    ],
]);
```

Lalu simpan file seeder.
{% endstep %}

{% step %}

### Jalankan reset database

Pastikan MySQL di **Laragon** sudah aktif.

Setelah itu, jalankan:

```bash
php artisan migrate:fresh --seed
```

Perintah ini akan menghapus semua tabel, membuat ulang tabel, lalu menjalankan seeder.
{% endstep %}
{% endstepper %}

### Kenapa memakai `--seed`

Tanpa `--seed`, database memang dibangun ulang.

Tetapi tabel akan kembali kosong.

Dengan `--seed`, data dummy langsung dimasukkan lagi setelah migration selesai.

Ini cocok saat Anda sedang menguji aplikasi.

### Risiko yang wajib dipahami

`migrate:fresh` adalah perintah yang kuat, tetapi berbahaya.

Perintah ini menghapus seluruh tabel di database aktif.

{% hint style="danger" %}
Gunakan `migrate:fresh` hanya di lingkungan lokal atau saat latihan. Jangan jalankan di server produksi.
{% endhint %}

Jika dijalankan di server yang berisi data asli, semua data bisa hilang.

Karena itu, selalu pastikan Anda tahu database mana yang sedang aktif.

### Troubleshooting yang paling sering

Masalah yang paling sering muncul:

* **`Nothing to migrate`** — migration lama memang tidak dibaca ulang oleh `php artisan migrate`
* **`Unknown column 'kategori'`** — seeder dan migration belum sinkron
* **database kosong setelah fresh** — Anda menjalankan `migrate:fresh` tanpa `--seed`
* **gagal terhubung ke database** — MySQL belum aktif atau `.env` masih salah

{% hint style="warning" %}
Simpan semua file lebih dulu sebelum menjalankan `php artisan migrate:fresh --seed`.
{% endhint %}

### Poin evaluasi bab 5.5

Pastikan Anda sudah memahami poin berikut:

* Saya paham kenapa `php artisan migrate` bisa menampilkan `Nothing to migrate`.
* Saya tahu Laravel mencatat riwayat migration di tabel `migrations`.
* Saya paham fungsi `php artisan migrate:fresh`.
* Saya tahu perintah ini menghapus semua tabel lalu membangunnya ulang.
* Saya paham fungsi `--seed` setelah proses fresh.
* Saya tahu perintah ini hanya aman untuk lingkungan lokal.
* Saya bisa menyesuaikan migration dan seeder saat struktur tabel berubah.

Jika semuanya sudah jelas, lanjut ke [5.6 Mengatasi Error Gagal Koneksi](/laravel/bab-5-migration-and-seeder/5.6-mengatasi-error-gagal-koneksi.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://learn.devlabss.my.id/laravel/bab-5-migration-and-seeder/5.5-penjelasan-perintah-migrate-fresh.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
