什麼是 Seeding
Seeding 是將範例資料或初始資料寫入資料庫的機制。 在開發環境設定或自動化測試中,通常需要事先有資料。若每次都手動輸入太耗時,用 seeder 將它整理為可反覆執行的形式。 Seeder 類別放在database/seeders 目錄。預設會有 DatabaseSeeder 類別。
建立 Seeder
用make:seeder Artisan 指令產生新的 seeder 類別。
database/seeders/UserSeeder.php。
Seeder 的實作
在run() 方法中撰寫寫入資料的處理。可用 DB facade 或 Eloquent model 插入。
使用 DB facade
使用 Eloquent model
執行 seeding 過程中,mass assignment 保護會自動停用。可不用管
$fillable 或 $guarded 的設定就寫入資料。與 Model Factory 的組合
若需要大量測試資料,與 model factory 組合會很方便。使用 factory 可一次產生大量隨機假資料。DatabaseSeeder 的用法
DatabaseSeeder 是統一管理多個 seeder 的進入點。用 call() 方法指定要執行的 seeder。
call() 傳入的順序執行。若有外鍵約束,請安排先 seed 被參考的資料表(如 users → posts)。
執行 Seeder
執行全部 seeder
DatabaseSeeder,並依序執行以 call() 指定的 seeder。
只執行特定 seeder
用--class 選項指定要執行的 seeder 類別。
與 Migration 同時執行
若在migrate:fresh 指令加上 --seed 選項,會重建所有資料表後一併執行 seeding。
--seeder 選項。
在正式環境執行
在正式環境嘗試執行 seeding 時會顯示確認提示。若要不確認直接執行,使用--force 旗標。
抑制 Model 事件
若想避免 seeding 中觸發 model 事件(如creating、created),使用 WithoutModelEvents trait。
call() 執行的子 seeder。
實務範例:部落格應用的 seeder
以下是設定使用者與文章的部落格應用初始資料的範例。後續步驟
Eloquent 入門
學習用 Eloquent ORM 取得並操作 seeder 寫入的資料。