php - 无法解决此错误 : "Target class [DatabaseSeeder] does not exist."

标签 php laravel-6

很多人问过这个错误:目标类[DatabaseSeeder]不存在。似乎有很多根本原因,但我无法确定我的根本原因。 我正在使用 Laravel 6.20.43。该软件在浏览器中运行时不会产生任何错误。

错误

使用此命令时出现错误:php artisan db:seed

这是 DatabaseSeeder.php:

<?php

namespace Database\seeds;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Database\Eloquent\Model;
use App\User;


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

我尝试了什么?

  • 我尝试在 DatabaseSeeder::run() 中添加 dd(...) 。 dd(...) 未执行。
  • 我已尝试 Composer 更新。更新执行得很好,但没有解决错误。
  • 我在 DatabaseSeeder.php 中尝试了多个 use 子句。
  • 我尝试过 php artisan migrate:fresh
  • 我尝试了多种解决方案组合,例如在转储自动加载之前运行迁移,反之亦然。
  • 我尝试过composer dump-autoload,这是输出:
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
Generated optimized autoload files containing 4381 classes
  • 我尝试将 php artisan db:seed 的输出重定向到 xdebug,以便我可以逐步分析发生的情况。我在这里需要运气,但我运气不好。
  • 我尝试使用 php artisan db:seed -vvv 来检查错误。这是完整的输出:
   Illuminate\Contracts\Container\BindingResolutionException  : Target class [DatabaseSeeder] does not exist.

  at /home/billybob/laravel-cursus1/vendor/laravel/framework/src/Illuminate/Container/Container.php:805
    801| 
    802|         try {
    803|             $reflector = new ReflectionClass($concrete);
    804|         } catch (ReflectionException $e) {
  > 805|             throw new BindingResolutionException("Target class [$concrete] does not exist.", 0, $e);
    806|         }
    807| 
    808|         // If the type is not instantiable, the developer is attempting to resolve
    809|         // an abstract type such as an Interface or Abstract Class and there is

  Exception trace:

  1   ReflectionException::("Class DatabaseSeeder does not exist")
      /home/billybob/laravel-cursus1/vendor/laravel/framework/src/Illuminate/Container/Container.php:803

  2   ReflectionClass::__construct()
      /home/billybob/laravel-cursus1/vendor/laravel/framework/src/Illuminate/Container/Container.php:803

  3   Illuminate\Container\Container::build()
      /home/billybob/laravel-cursus1/vendor/laravel/framework/src/Illuminate/Container/Container.php:681

  4   Illuminate\Container\Container::resolve()
      /home/billybob/laravel-cursus1/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:785

  5   Illuminate\Foundation\Application::resolve()
      /home/billybob/laravel-cursus1/vendor/laravel/framework/src/Illuminate/Container/Container.php:629

  6   Illuminate\Container\Container::make()
      /home/billybob/laravel-cursus1/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:770

  7   Illuminate\Foundation\Application::make()
      /home/billybob/laravel-cursus1/vendor/laravel/framework/src/Illuminate/Database/Console/Seeds/SeedCommand.php:76

  8   Illuminate\Database\Console\Seeds\SeedCommand::getSeeder()
      /home/billybob/laravel-cursus1/vendor/laravel/framework/src/Illuminate/Database/Console/Seeds/SeedCommand.php:63

  9   Illuminate\Database\Console\Seeds\SeedCommand::Illuminate\Database\Console\Seeds\{closure}()
      /home/billybob/laravel-cursus1/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/GuardsAttributes.php:129

  10  Illuminate\Database\Eloquent\Model::unguarded()
      /home/billybob/laravel-cursus1/vendor/laravel/framework/src/Illuminate/Database/Console/Seeds/SeedCommand.php:64

  11  Illuminate\Database\Console\Seeds\SeedCommand::handle()
      /home/billybob/laravel-cursus1/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:36

  12  Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
      /home/billybob/laravel-cursus1/vendor/laravel/framework/src/Illuminate/Container/Util.php:37

  13  Illuminate\Container\Util::unwrapIfClosure()
      /home/billybob/laravel-cursus1/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:93

  14  Illuminate\Container\BoundMethod::callBoundMethod()
      /home/billybob/laravel-cursus1/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:37

  15  Illuminate\Container\BoundMethod::call()
      /home/billybob/laravel-cursus1/vendor/laravel/framework/src/Illuminate/Container/Container.php:590

  16  Illuminate\Container\Container::call()
      /home/billybob/laravel-cursus1/vendor/laravel/framework/src/Illuminate/Console/Command.php:134

  17  Illuminate\Console\Command::execute()
      /home/billybob/laravel-cursus1/vendor/symfony/console/Command/Command.php:255

  18  Symfony\Component\Console\Command\Command::run()
      /home/billybob/laravel-cursus1/vendor/laravel/framework/src/Illuminate/Console/Command.php:121

  19  Illuminate\Console\Command::run()
      /home/billybob/laravel-cursus1/vendor/symfony/console/Application.php:1009

  20  Symfony\Component\Console\Application::doRunCommand()
      /home/billybob/laravel-cursus1/vendor/symfony/console/Application.php:273

  21  Symfony\Component\Console\Application::doRun()
      /home/billybob/laravel-cursus1/vendor/symfony/console/Application.php:149

  22  Symfony\Component\Console\Application::run()
      /home/billybob/laravel-cursus1/vendor/laravel/framework/src/Illuminate/Console/Application.php:93

  23  Illuminate\Console\Application::run()
      /home/billybob/laravel-cursus1/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php:131

  24  Illuminate\Foundation\Console\Kernel::handle()
      /home/billybob/laravel-cursus1/artisan:37

我真的无法理解如何调试 php artisan db:seed -vvv 的输出。所有这些文件都驻留在供应商目录中,这意味着我无法轻松检查程序流程。还请说明我以后如何自己调试此类错误。

最佳答案

它找不到您的 DatabaseSeeder 类,因为您的命名空间不正确。

您需要将 DatabaseSeeder 类的命名空间更改为:

namespace Database\seeds;

至:

namespace Database\Seeders;

确保您的 Composer 自动加载设置正确:

"autoload": {
  "psr-4": {
    "Database\\Seeders\\": "database/seeders/"
  }
}

或者,从 DatabaseSeeder 类中完全删除所有命名空间,并将上述更改恢复到 Composer.json 然后运行:

composer dump-autoload

然后尝试运行:

php artisan migrate:fresh --seed

关于php - 无法解决此错误 : "Target class [DatabaseSeeder] does not exist.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70483229/

相关文章:

php - 获取键为 id 而不是数组键为 0,1 的数组结果

mysql - Laravel SQLSTATE[HY000] [1698] 用户 'root' @'localhost' 的访问被拒绝

Laravel 6.x - 缓存 'pagination()'

mysql - 如何级联删除多态表?

php - 支持的方法 : GET, HEAD 但不是 POST

php - 使用 CSV 文件导入文本 MYSQL

php - 计算和处理php脚本进程的运行时间

php - 无法编辑表 PDO PHP 中的记录

php - 错误 : Column not found: 1054 Unknown column 'updated_at' in 'field list'

laravel - 尝试catch在Laravel中间件中无法正常工作吗?