Laravel 學習筆記 — 種子資料

ViNciHsu
Oct 17, 2020

--

這篇主要在了解,如何透過 seeder 幫我們快速建立資料,並且了解,如果想要自動化的生成這些資料時,應該要放在 seeder 內,而不是 migration 內

- 不要養成在 migration 內放資料的習慣,舉例來說,如果該 up() 只是增加一個欄位而不是創建一個資料表時,那 down() 該怎麼辦?down() 本來是要 drop 掉(反向操作)的,但是這個 up() 其實只是額外增加一個欄位而已,並非創建一張新的資料結構;因此,如果想要在 migration 做完時,放一些預設資料的行為時,請放到 Seed Data 內

跟 seed 有關的指令有兩個,db:seed / make:seeder

db:seed 預設試跑 seeders \DatabaseSeeder.php 內的 run() ,這是預設用的 seeder,因此如果要跑商店/書有關的 seeder,建議另外創建

db:seed 預設試跑 seeders\DatabaseSeeder.php 內的 run()

創建新的 StoreSeeder,php artisan StoreSeeder

創建新的 StoreSeeder

接著使用該 StoreSeeder 做事,切記 StoreSeeder.php 內要有 use App\Models\Store; 其 function run() 內的 Store::factory()->count(3)->create(); 才會有作用

預設執行 db:seeder 不會執行到 StoreSeeder.php 因此可以指定 class

php artisan db:seed --class=StoreSeeder (此處指定 class 為 StoreSeeder 的 seeder)

指定 class 為 StoreSeeder 的 seeder

查看 SQLite ,可以看到 php artisan db:seed — class=StoreSeeder 指令,幫我們在 stores 創建了3間商店的資料

--

--

No responses yet