はじめに
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!
ぜひあなたのプロジェクトでも活用してみてくださいね。



コメント