如上篇,使用Migration來做DB版本控制,但是會發現開發過程中若是要建立測試資料,要進DB一筆一筆手動新增或執行預先寫好的insert sql,其實有點麻煩,使用Laravel提供的Seeder功能,就可以解決這個問題。
指令如下,假設建立一個user table seeder:
$ php artisan make:seeder UserTableSeeder
- 建立的seeder會在這個路徑: database/seeders。
將UserTableSeeder code修改如下:
run seeder: 指定執行UserTableSeeder
$ php artisan db:seed --class=UserTableSeeder
如上圖,這樣就把資料塞進去了,當然我們也可以把程式改成迴圈來塞多筆測試資料。
假設我們有很多張table都要塞資料,每個seeder都要下一次指令會很麻煩,這時候可以透過內建的DatabaseSeeder來達到一次執行多個seeder,還可以自由調整順序。
接著把DatabaseSeeder改成這樣:
如上圖,假設我們還有一個ArticleTableSeeder,因為關聯的緣故,必須先有user資料才有article資料,就可以照這樣的順序來排。
run DatabaseSeeder:
$ php artisan db:seed
執行DatabaseSeeder,就會依序執行這兩個seeder囉!
在開發過程中難免會把資料弄髒,為了方便測試功能,常常會需要有乾淨的資料環境,這時候可以先把資料庫重建,並重塞測試資料進去:
$ php artisan migrate:refresh
$ php artisan db:seed
- migrate:refresh = 等於是rollback所有migrate,接著再下一次migrate的意思。
- db:seed = 上述有提到,會執行DatabaseSeeder。
結合上面兩個指令,可以直接下:
$ php artisan migrate:refresh --seed
這樣就可以快速重建乾淨的DB資料環境囉!
結論:
Laravel 提供的Database Seeders,不僅可以用來捏測試資料,有些系統情境可能會有某些表會需要預塞資料。因此,不管是開發還是系統上線後,只要下指令就可以直接把需要預塞的資料都準備好,可以說是相當方便!