什麼是 Migration
Migration 就像資料庫的版本控管。 它讓團隊能夠共享、管理應用程式的資料庫綱要定義。 你或許曾遇過拉取原始碼後,還得請團隊成員手動在本機資料庫加欄位的情境。 Migration 就是解決這問題的辦法。 Migration 檔案存放在database/migrations 目錄。
每個檔名都包含時間戳,Laravel 會依此決定執行順序。
建立 Migration 檔
以make:migration Artisan 指令建立新的 migration 檔。
create_posts_table,範本會事先產生用於建立 posts 資料表的程式碼。
Migration 結構
Migration 類別具有up 與 down 兩個方法。
up:對資料庫新增資料表、欄位、索引。down:將up的操作反轉,回滾時執行。
主要欄位定義方法
Blueprint 類別提供大量欄位類型。
欄位修飾子
可用方法鏈附加欄位修飾子。向量欄位與索引
vector 方法會建立用來儲存嵌入向量的 vector 欄位。請在 dimensions 指定所使用嵌入服務的輸出維度。
pgvector 擴充功能的 PostgreSQL 連線,以及 MariaDB 11.7 以上版本。在 PostgreSQL 上,請在建立向量欄位前啟用 pgvector。
vector 欄位加上 index。該索引採用餘弦距離。
dropVectorIndex。
線上建立索引
在大型資料表上建立索引時,通常在索引建立期間會鎖定資料表,讀寫操作必須等待。在 MySQL 中,於索引或外部索引鍵定義加上inplace 修飾子,即可使用 INPLACE 演算法執行操作。
inplace 可與 lock 修飾子搭配使用,指定操作期間的資料表鎖定方式。指定 none 時,在 MySQL 允許的操作中可繼續進行讀寫。
INPLACE 演算法以及所指定的鎖定模式。若要在外部索引鍵操作使用 inplace,需事先停用外部索引鍵限制。
執行 Migration
用migrate 執行所有未執行的 migration。
migrate:status。
回滾
用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 操作都會發送事件。所有事件皆繼承Illuminate\Database\Events\MigrationEvent。
例如可監聽
MigrationsEnded,在 migration 結束後清除快取。
下一步
資料庫 Seeding
學習如何為 migration 建好的資料表匯入範例資料。
Eloquent 入門
學習如何以 Eloquent ORM 操作 migration 建好的資料表。