php artisan db:seedでClass ExampleSeeder does not existが出た

  • Laravel
  • Composer

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

Seederファイルを新規に追加して php artisan db:seed を実行したら、こう言われた。

$ artisan db:seed
In Container.php line 752:
Class ExampleSeeder does not exist

何が起きたか

ファイル自体は存在するし、namespaceもクラス名も間違ってない。それでも does not exist と言われる。

原因

Composerのオートローダーが、追加したクラスをまだ認識してなかった。PHPはオートロード用に事前生成されたクラスマップを見に行くので、ファイルを新規追加しただけだとそのマップに載っていないことがある。

対処

$ composer dump-autoload

これでオートロードマップが再生成されて、ExampleSeeder が見つかるようになった。

直らない場合

上のコマンドで直らないなら、以下のどれかがズレてる可能性がある。

  • composer.json の autoload.psr-4 に対象ディレクトリ(database/seeders など)が入ってない
  • Seederファイル内の namespace 宣言とディレクトリ構成が一致してない
  • クラス名のスペルミス(呼び出し側と定義側で表記が違う)

今回は単純にキャッシュが古かっただけで、composer dump-autoload 一発で解決した。