はじめに
Laravelでアプリを作っていると、初期データを登録するために「Seeder(シーダー)」を使う場面が出てきますよね。
特にプロジェクトが大きくなると、Seederの数もどんどん増えてきます。
そんなときに活躍するのが $this->call()
というメソッド。
「これって何?」「なんで必要なの?」と疑問に思う方も多いのではないでしょうか。
今回は、この $this->call()
の意味と使い方を、初心者向けにやさしく解説します!
やりたいこと
-
$this->call()
の意味と役割を理解する -
複数のSeederをまとめて実行する方法を知る
-
ソースコードレベルでの動作も軽く把握する
ディレクトリ構成
LaravelではSeederファイルは基本的に以下の場所に保存されます。
database/ └── seeders/ ├── DatabaseSeeder.php ←ここで $this->call() を使う ├── RoleSeeder.php ├── DepartmentsMasterSeeder.php └── ...
コードスクリプト
コードスクリプトの概要
以下のように、Laravelの DatabaseSeeder.php
に $this->call()
を使って複数のSeederをまとめて呼び出します。
public function run(): void { $this->call([ RoleSeeder::class, DepartmentsMasterSeeder::class, ProjectCategorySeeder::class, ]); }
これで、php artisan db:seed
を実行するだけで上記3つのSeederが順番に実行されます。
実行結果
コマンドはいつも通り、以下でOKです。
php artisan db:seed
すると以下のように複数のSeederが順番に実行されます。
Seeding: RoleSeeder Seeding: DepartmentsMasterSeeder Seeding: ProjectCategorySeeder Database seeding completed successfully.
コード解説
✅ $this->call()
の意味
これは Laravelが用意している Seederの実行専用メソッド です。
引数に渡したSeederクラス(::class
)の run()
メソッドを自動的に呼び出してくれます。
$this->call([ RoleSeeder::class, DepartmentsMasterSeeder::class, ]);
上記のように配列で渡せば、複数Seederを一括で実行可能です。
✅ ::class って何?
PHPの ::class
は、クラス名の「文字列」を返す構文です。
例えば RoleSeeder::class
は、実際には "App\\Database\\Seeders\\RoleSeeder"
という文字列になります。
✅ Laravel内部ではどう動いてるの?
Laravelの Seeder
クラス(Illuminate\Database\Seeder
)には、以下のように call()
が定義されています。
public function call($class, array $parameters = []) { $classes = Arr::wrap($class); foreach ($classes as $class) { $this->resolve($class)->__invoke(); } }
注意点
-
クラス名とファイル名は一致させましょう(例:
RoleSeeder
クラスはRoleSeeder.php
) -
Seeder間に依存関係がある場合は順番に注意
🔗 Laravel公式ドキュメントにも記載あり!
今回紹介した $this->call()
は、Laravelの公式ドキュメントにも記載されています。
さらに詳しく知りたい方は、ぜひこちらもチェックしてみてください。
まとめ
Laravelでデータベースに初期データを入れるとき、Seederの数が増えてくると管理が大変になります。
そんなときに $this->call()
を使えば、1箇所で複数のSeederを順序通りに実行できるので非常に便利です。
Laravel標準の仕組みなので、安心して使ってOK!
ぜひあなたのプロジェクトでも活用してみてくださいね。
コメント