Skip to main content

什麼是 Migration

Migration 就像資料庫的版本控管。 它讓團隊能夠共享、管理應用程式的資料庫綱要定義。 你或許曾遇過拉取原始碼後,還得請團隊成員手動在本機資料庫加欄位的情境。 Migration 就是解決這問題的辦法。 Migration 檔案存放在 database/migrations 目錄。 每個檔名都包含時間戳,Laravel 會依此決定執行順序。

建立 Migration 檔

make:migration Artisan 指令建立新的 migration 檔。
Laravel 會根據 migration 名稱推測資料表名稱並產生對應範本。 若名稱為 create_posts_table,範本會事先產生用於建立 posts 資料表的程式碼。

Migration 結構

Migration 類別具有 updown 兩個方法。
  • up:對資料庫新增資料表、欄位、索引。
  • down:將 up 的操作反轉,回滾時執行。

主要欄位定義方法

Blueprint 類別提供大量欄位類型。

欄位修飾子

可用方法鏈附加欄位修飾子。

執行 Migration

migrate 執行所有未執行的 migration。
要查看已 / 未執行的 migration,可用 migrate:status
正式環境執行 migration 會出現確認提示。 想跳過確認可用 --force,但因可能影響資料,請務必謹慎。

回滾

migrate:rollback 可回滾最近一批 migration。
要回滾指定步數,可用 --step
若要先回滾全部再重新執行,可用 migrate:refresh
migrate:refresh 會重建所有資料表,既有資料會遺失。 適合開發期重置資料庫。

實戰範例:建立 posts 資料表

以管理部落格文章的 posts 資料表為例,走過一次完整流程。

1. 產生 migration 檔

2. 編輯 migration

打開 database/migrations/xxxx_xx_xx_xxxxxx_create_posts_table.php 編輯。

3. 執行 migration

執行後資料庫中會建立 posts 資料表。

4. 之後新增欄位

若在資料表建立後要新增欄位,別直接修改既有 migration,改為建立新的 migration。
請避免直接修改既有的 migration 檔。 這會破壞與其他成員或正式環境的一致性。 變更請一律以新的 migration 加入。

Migration 事件

每一次 migration 操作都會發送事件。所有事件皆繼承 Illuminate\Database\Events\MigrationEvent 例如可監聽 MigrationsEnded,在 migration 結束後清除快取。

下一步

資料庫 Seeding

學習如何為 migration 建好的資料表匯入範例資料。

Eloquent 入門

學習如何以 Eloquent ORM 操作 migration 建好的資料表。
最後修改於 2026年8月2日