独学者Fossa

独学していることなど

簡易モジュール構造(2)

fossa-hobby.hatenablog.com

使用環境

Name Version
PHP 8.1.6
Laravel 9.14.1

Database: Seeding

今回、Module構造の中で、Seedingしてみたいと思い、試してみました。

modules/Admin/Database/Seedersフォルダ内にUserSeeder.phpがあるケースを想定しています。

php artisan db:seed --class=

LaravelSeedingを使って、上記のようにクラスを指定することで、実現します。

失敗例

php artisan db:seed --class=Modules\Admin\Database\Seeders\UserSeeder

上記のように指定すると、下記のようにエラーが出ます。

Illuminate\Contracts\Container\BindingResolutionException 

Target class [Database\Seeders\ModulesAdminDatabaseSeedersUserSeeder] does not exist.

成功例

php artisan db:seed --class=Modules\\Admin\\Database\\Seeders\\UserSeeder
Database seeding completed successfully.

Database/Console/Seeds/SeedCommand.php

getSeeder()の一部を引用します。

        $class = $this->input->getArgument('class') ?? $this->input->getOption('class');

        if (! str_contains($class, '\\')) {
            $class = 'Database\\Seeders\\'.$class;
        }

コマンドの--classに、\\が含まれていなければ、頭にDatabase\\Seeders\\を付けていますね。