Lumen 5.6 - php artisan db:seed 出现错误 'Class DatabaseSeeder does not exist'

Lumen 5.6 - php artisan db:seed got error 'Class DatabaseSeeder does not exist'

我正在尝试使用 Lumen 5.6.3 播种并执行命令: php artisan db:seed.

然后我得到错误,说

In Container.php line 767:
Class DatabaseSeeder does not exist

在我的 database/seeds 目录中,确实存在 DatabaseSeeder.php。 我刚刚复制了Lumen官方文档中的源码,源码如下

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
    }
}

我用谷歌搜索了很多次来解决这个错误,当然也尝试了composer dump-autoloadcomposer dump-autoload -ocomposer dump-autoload --no-dev几次,情况从未改变。

我也检查了我的 composer/autoload_classmap.php 并且有 'DatabaseSeeder' => $baseDir . '/database/seeds/DatabaseSeeder.php' 所以我看起来自动加载工作正常。

非常感谢任何建议或评论。 谢谢。

您可以将 php artisan db:seed 与流明一起使用。 命令是:php artisan make:seeder Seedername。 例如,您可以使用 php artisan make:seeder UsersTableSeeder 为用户创建 table 播种机。 该文件将在文件夹 database\seeds.

中创建
use Illuminate\Database\Seeder;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        factory(App\User::class, 10)->create();
    }
}

这将为用户 class 创建 10 个示例。 然后你应该cinfigure databaseseeder文件

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Model::unguard();
        // Register the user seeder
        $this->call(UsersTableSeeder::class);
        Model::reguard();
    }
}

要解决此问题,您必须调整 composer.json 以便 php artisan db:seed 上班

默认情况下,Lumen 已将数据库目录放在autoload-dev 下。
"autoload-dev": { "classmap": [ "tests/", "database/" ] },

要解决这个问题,只需将类映射与您的数据库目录一起放在自动加载下

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

在调整 运行 composer update 命令后才能使调整生效。

我为 bootstrap/app.php.

设置了错误的值

我是这样设置的

require_once __DIR__.'/../../vendor/autoload.php';

像下面这样修改这部分后,我可以运行db:seed命令正确。

require_once __DIR__.'/../vendor/autoload.php';