LARAVEL 8: 找不到类'Database\Seeders\DB'

10

我正在使用seeder填充我的users表,所以我创建了一个名为UserSeeder的新seeder,然后我添加了以下代码:

public function run()
{
    foreach(range(1,10) as $item)
    {
        DB::table('users')->insert([
            'name' => "name $item",
            'email' => "email $item",
            'email_verified_at' => now(),
            'password' => "password $item" 
        ]);
    }
}

之后我尝试了php artisan db:seed --class=UserSeeder,但是显示以下错误:

Error

Class 'Database\Seeders\DB' not found

这与以下代码行有关:

DB::table('users')->insert([

那么为什么它在那里找不到,现在我该怎么办?


命名空间,您需要在文件中导入/别名DB类才能使用它。 - lagbox
@lagbox,能告诉我它在哪里以及我应该写什么吗? - user9259038
在命名空间声明后面添加 use DB; - lagbox
我之前也遇到了这个问题,解决方法是在创建新的填充器类或更改其命名空间后,运行 composer dump-autoload - Tohid Dadashnezhad
3个回答

38

这是因为Laravel将在当前命名空间Database\Seeders中查找DB类。

由于Laravel在config/app.php中定义了门面(facades),使得您可以不使用完整的类名称来使用这些类。

    'DB' => Illuminate\Support\Facades\DB::class,

您可以在命名空间声明后使用以下方法声明DB类

use DB;

或者只需使用反斜杠即可。

    \DB::table('users')->insert([

声明式方法始终是推荐的选项,因为它允许您在调用完整的类路径和名称时随意使用对象/类,而每次使用都会导致很多混乱,并且在出现错误时可能难以跟踪。 - The Only Smart Boy

9
在 UserSeeder 类中添加:

use Illuminate\Support\Facades\DB;


当我使用这个建议时,自动完成也在Visual Studio Code中为我工作。 - olle.holm

0

我通过导入解决了Laravel 9中的同样错误。

use Illuminate\Database\Seeder;

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