今天讓我們來看看播種器吧!
播種器 (Seeder) 是 Laravel 提供的一個批次建立測試資料的功能,可以讓我們將建立測試資料的邏輯,統一寫在一個播種器類別中,方便我們重複調用以建立否些特定資料。
php artisan make:seeder UserSeeder
<?php
namespace Database\Seeders;
use App\Models\User;
use App\Models\UserLog;
use Illuminate\Database\Seeder;
class UserSeeder extends Seeder{
/** * Run the database seeds. * * @return void */
public function run() {
$users = User::factory()
->count(10)
->create();
foreach ($users as $user) {
UserLog::factory()
->count(5)
->create([
'user_id' => $user->id
]); } }}
在以上播種器程式碼中,run()
這個函數便是播種器主要執行的邏輯區塊。我們在這個播種器內,實作了一個使用 Model Factory 批次建立10筆使用者資料的邏輯,同時會對每個使用者資料,各別建立5筆Log資料。
<?php
namespace Tests\Feature;
use Database\Seeders\UserSeeder;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class UserTest extends TestCase{
use RefreshDatabase;
public function testUserSeeder() {
$this->seed(UserSeeder::class);
// 下略
} public function testUserSeeder2() {
$this->seed(UserSeeder::class);
// 下略
}}
在以上的測試程式碼中,我們調用了 UserSeeder
這個播種器來建立資料,當有多個測試案例函數都需要某一群特定資料時,用播種器來建立測試資料,可以避免實作重複的建立測試資料邏輯四散在不同的測試案例函數中。
除了在測試程式碼中調用播種器,也可以用指令的方式進行資料播種:
php artisan db:seed --class=UserSeeder
另外,其實也可以在A播種器調用其他播種器:
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Seeder;
class UserSeeder extends Seeder{
/** * Run the database seeds. * * @return void */
public function run() {
User::factory()
->count(10)
->create();
foreach ($users as $user) {
UserLog::factory()
->count(5)
->create([
'user_id' => $user->id
]); } // 假設有實作另一組播種器 PostSeeder
$this->call([
PostSeeder::class,
]); }}
以上就是今天關於播種器的介紹,大家可以多加利用!
下一篇讓我們來看一下 Mocking 技巧吧!
如果您喜歡這篇文章,歡迎加入追蹤以接收新文章通知 😄