Laravel8にアップグレード後にfakerのseedingでTarget class [Database\Seeders\] does not existでハマる
Laravel7で開発したアプリをLaravel8にアップグレードしてFakerを使おうとしたら以下のようなエラーが出てハマりました。
Target class [Database\Seeders\UsersTableSeeder] does not exist
seedsディレクトリ名を変更
Laravel7まではdatabase/seedsだったのがLaravel8ではdatabase/seedersになりました。そもそもエラーがTarget class [Database\ Seeders] does not existですしね。
(seedsでもseedersでもどっちでもいいよと思うのは私だけ?混乱するような面倒な変更はしないで欲しい・・・)
なので、まずはディレクトリ名をseedersに変更します。
$ mv database/seeds database/seeders
composer.jsonを修正
ディレクトリ名の変更に合わせてcomposer.jsonも変更します。
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
}
}
"classmap"は必要なくなったようなので削除します。
Factoryを作り直す
私が使っているのはUserFactory.phpです。Laravel8ではFactoryの内容も変更になったので書き換える必要があります。
現在のUserFactory.phpを修正してもいいのですが、面倒なので元のファイルを違う名前にして保存しておき、新たにartisanコマンドで作り直します。
$ mv UserFactory.php UserFactory7.php
$ php artisan make:factory UserFactory
新しいUserFactory.phpが出来上がったらUserFactory7.phpから必要な箇所を移植します。
気を付けなければならないのは、\$fakerは$this->fakerにしないとならないこと。
return [
$faker->name; // ~Laravel7
$this->faker->name; // Laravel8
];
*作業が終わったらUserFactory7.phpは消しておきましょう。
モデルを修正
HasFactoryを追加します。
use Illuminate\Notifications\Notifiable;
use Illuminate\Database\Eloquent\Factories\HasFactory; // 追加
class User extends Authenticatable
{
use Notifiable;
use HasFactory; // 追加
DatabaseSeederを修正
namespace Database\Seedersを追加します。
namespace Database\Seeders; // 追加
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
UsersTableSeederを修正
namespaceを追加します。また、seeder内のcreate文の書き方が変わりました。
namespace Database\Seeders; // 追加
use Illuminate\Database\Seeder;
class UsersTableSeeder extends Seeder
{
public function run()
{
// factory(App\User::class, 30)->create(); // ~Laravel7
\App\User::factory()->count(30)->create(); // Laravel8
}
実行
最後にcomposer dump-autoloadしてからseedします。
$ composer dump-autoload
$ php artisan db:seed --class=UsersTableSeeder
Author And Source
この問題について(Laravel8にアップグレード後にfakerのseedingでTarget class [Database\Seeders\] does not existでハマる), 我々は、より多くの情報をここで見つけました https://qiita.com/flatwhite/items/f2809d223b45582015b1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .