0
1

More than 1 year has passed since last update.

Laravel 8 へアップグレードしてからシーダーを使う際の変更

Last updated at Posted at 2022-09-10

はじめに

Laravel 6から8へアップグレードした際にアップグレード自体は問題なくできたのですが、
シーダーの実行につまずいたので残しておきます。

事象

シーダーを実行すると以下のようなエラーが出ました。

$ php artisan db:seed
  Illuminate\Contracts\Container\BindingResolutionException

  Target class [DatabaseSeeder] does not exist.

変更箇所

Laravel 8へアップグレードした後にシーダーを使うための変更箇所をまとめます。

1. composer.jsonの変更

変更前

composer.json
    "autoload": {
        "psr-4": {
            "App\\": "app/",
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    },

変更後

composer.json
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        }
    },

変更後にcomposer dump-autoloadを実行します。

$ composer dump-autoload

2. フォルダ名称の変更

database/seedsフォルダをdatabase/seedersフォルダへ名称を変更します。

変更前

└── database
    ├── factories
    ├── migrations
    └── seeds

変更後

└── database
    ├── factories
    ├── migrations
    └── seeders

3. seederのファイルの変更

seederのファイルにDatabase\Seeders名前空間を追加します。

変更前

database/seeders/DatabaseSeeder.php
<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{

変更後

database/seeders/DatabaseSeeder.php
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{

つまずいた原因

2. フォルダ名称の変更

これを見落としていました。
composer.jsonやseederのファイルの変更に気がとられて
単純なところが抜けていました。

Laravelの公式ドキュメントにもしっかりと、しかしそっと書いてあります。
なんで見落としたんだ。。。

シーダとファクトリの名前空間
影響の可能性: 高い

シーダとファクトリは名前空間になりました。これらの変更に対応するには、Database\Seeders名前空間をシードクラスに追加します。さらに、以前のdatabase/seedsディレクトリの名前をdatabase/seedersに変更する必要があります:

Laravelの公式ドキュメントより引用



抜けていたフォルダ名称の変更も含めて
3点を変更することによって問題なくseederが実行できました。

$ php artisan db:seed
Database seeding completed successfully.

参考記事

https://readouble.com/laravel/8.x/ja/upgrade.html#seeder-factory-namespaces
https://www.itsolutionstuff.com/post/solved-laravel-8-target-class-databaseseeder-does-not-existexample.html

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1