目标类 [Database\Seeders\UsersTableSeeder] 不存在。

5

我遇到了“目标类 [Database\Seeders\UsersTableSeeder] 不存在”的错误,但我无法弄清原因。我已经尝试过贴在相关问题中的解决方案,但它们都没有为我工作。

以下是我的composer.json自动加载/类映射设置:

"autoload": {
    "psr-4": {
        "App\\": "app/"
    },
    "classmap": [
        "database/seeders",
        "database/factories"
    ]
},

UsersTableSeeder 类

<?php

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('users')->insert([
            'fname' => 'Billy',
            'lname'=> 'Bob',
            'email' => 'billy@gmail.com',
            'password' => Hash::make('12345678'),
        ]);
    }
}

DatabaseSeeder 类


<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        // \App\Models\User::factory(10)->create();
        $this->call(UsersTableSeeder::class);
    }
}
2个回答

20

您的 UsersTableSeeder 类中缺少命名空间。

<?php

namespace Database\Seeders;
...

这样做将使自动加载程序找到其他填充器,因为它们与 DatabaseSeeder 相同的命名空间。

注意:在此之后运行 composer dump-autoload


2
我添加了命名空间并运行了composer dump-autoload。问题已经解决,谢谢。 - Ken
1
无法解决我的问题。同样的问题仍然存在。 - vishal-mote
2
最好提供更多信息,而不是直接投票反对。你可能想分享一下你的情况,这样我们也可以帮助你。此答案特定于上述描述的问题。另外,你是否运行了 composer dump-autoload 呢? - Dark Knight
运行 composer dump-autoload 解决了我的问题。 - Will Kim
在Laravel 8中,database/seeds文件夹已被重命名为database/seeders。如果您从之前的版本升级,可能需要重新命名此文件夹。 - Skyvory

0

考虑到如果您错误地调用特定的seeder,会出现相同的错误消息,即使答案与上述问题无关,我仍想跟进此主题。

因此,如果您运行命令:php artisan db:seed --class=UsersTableSeeder,则只会执行此seeder。这很好,但是如果您忘记在class之前添加--,那么您将收到相同的消息。

希望这能帮助到某些人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接