【问题标题】:LARAVEL 8: Class 'Database\Seeders\DB' not foundLARAVEL 8:找不到类'Database\Seeders\DB'
【发布时间】:2020-10-17 20:10:46
【问题描述】:

我正在使用播种机来填充我的 users 表,因此我创建了一个名为 UserSeeder 的新播种机,然后我将以下代码添加到其中:

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,但它显示了我:

错误

找不到类“Database\Seeders\DB”

与这一行有关的:

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

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

【问题讨论】:

  • namespacing,您必须导入/别名 DB 类才能在该文件中使用它
  • @lagbox 你能告诉我它在哪里,我应该写什么吗?
  • use DB; 在命名空间声明之后
  • 我也遇到了这个问题,我通过在创建新的播种器类或更改其命名空间后运行composer dump-autoload 解决了这个问题。

标签: php laravel eloquent laravel-8


【解决方案1】:

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

因为 Laravel 在 config/app.php 中定义了门面,它允许你使用那些没有完整类名的类。

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

您可以在命名空间声明之后声明 DB 类

use DB;

或者只是使用反斜杠。

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

【讨论】:

  • 声明方法始终是推荐的选项,因为它允许您在每次要使用时调用完整的类路径和名称时多次使用对象/类,这会导致很多混乱,并且在出现错误时可能难以跟踪
【解决方案2】:

在 UserSeeder 类中添加:

使用 Illuminate\Support\Facades\DB;

【讨论】:

  • 当使用这个建议时,自动完成在 Visual Studio 代码中也适用于我。
猜你喜欢
  • 2021-03-11
  • 2021-12-27
  • 1970-01-01
  • 2020-12-28
  • 1970-01-01
  • 2018-04-11
  • 2021-02-28
  • 1970-01-01
  • 2021-08-11
相关资源
最近更新 更多