Laravel 中如何依序執行所有的 seeder 檔案

在 Laravel 中,php artisan db:seed 命令預設就會依序執行所有的 seeder 檔案,但這個順序並不是根據檔名或建立時間自動確定的。

預設的執行方式

當您執行 php artisan db:seed 時,Laravel 會:

  1. 尋找 database/seeders/DatabaseSeeder.php 檔案。
  2. 執行 DatabaseSeeder.php 內部的 run() 方法。
  3. DatabaseSeeder.php 內部,您必須手動指定要依序執行的 Seeder 檔案。 Laravel 會按照您在 DatabaseSeeder 中呼叫它們的順序來執行。

如何確保依序執行 (標準做法)

要依序執行所有 Seeder,需要在 database/seeders/DatabaseSeeder.php 檔案中,使用 $this->call() 方法來呼叫建立的其他 Seeder 類別,並且按照您希望的順序排列它們。

範例:database/seeders/DatabaseSeeder.php

PHP
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     */
    public function run(): void
    {
        // 1. 確保 'Roles' (角色) 資料先建立 (因為其他 Seeder 可能會用到)
        $this->call(RoleSeeder::class); 

        // 2. 接著建立 'Users' (使用者) 資料
        $this->call(UserSeeder::class); 

        // 3. 最後建立 'Posts' (文章) 資料
        $this->call(PostSeeder::class); 
        
        // 可以在這裡加入更多 $this->call(),它們將會按照您排列的順序執行
    }
}

執行方式

完成上述設定後,只需要執行:

PHP
php artisan db:seed

Laravel 就會自動從 DatabaseSeeder 開始,並按照在 run() 方法中定義的順序 (RoleSeeder -> UserSeeder -> PostSeeder) 依序執行所有 Seeder。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


內容索引