クマのブログ

つまづいたところ、学びを書いていきます

【Laravel】Class hogeSeeder does not exist.

前提

Windows 10

・Laravel 8.0

背景

Laravel入門書進めていく中で参考書通り進めたが進まず、模索した結果解決したのでメモ

事象

任意のSeederファイル"PeopleTableSeeder.php"を作成後、DBにテストカラムを作成するにあたり

php artisan serve:db seed

を実行した。

結果、以下エラー発生。

Class PeopleTableSeeder does not exist.

試したこと

try1

Qiitaを参考に

composer dump-autoload

実行後、再度

php artisan serve:db seed // ①
or
php artisan serve:db seed --class=PeopleTableSeeder // ②

を実行

結果

①、②で同じエラー発生

try2

次に

php artisan migration:fresh

を実行後

composer dump-autoload
php artisan serve:db seed // ①

を実行(先述の②をやり忘れる)

結果

①で同じエラー発生…

try3

php artisan cache:clear

実行後

composer dump-autoload
php artisan serve:db seed // ①
or
php artisan serve:db seed --class=PeopleTableSeeder // ②

結果

①:エラー発生 ②:シーディング完了!

結論

エラーの要因は

・migrationのfreshが必要だった=悪さをするカラムがあったため(try2より) ・キャッシュが残っていたこと(try3より) ・php artisan serve:db seed --class=PeopleTableSeederのようにクラスを指定する必要がある(try2,3より)

のどれか。

所見

エラー文でググると、Qiitaのように

composer dump-autoload

だけで治る、とあるが、恐らくこれは6.x系までの話。

8.xでは先述の3つの要因が影響していると思われる。

参考記事

一般的な解決方法。 恐らくLaravel6.x系まではこれだけで解決したが8.x系ではダメっぽい

  • stackoverflow この人は色々やってもダメだったみたい… 僕の解決策以外にも
 php artisan optimize

とかやってみたらしい