【问题标题】:Lumen 5.6 - php artisan db:seed got error 'Class DatabaseSeeder does not exist'Lumen 5.6 - php artisan db:seed 出现错误“类 DatabaseSeeder 不存在”
【发布时间】:2018-11-22 12:53:36
【问题描述】:

我正在尝试使用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-autoload、composer dump-autoload -o、composer dump-autoload --no-dev,但情况从未改变。

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

我非常感谢任何建议或 cmets。 谢谢。

【问题讨论】:

  • Lumen 没有播种 DB 的能力,你必须自己实现或切换到 Laravel
  • 我做了php artisan list 发现db:seed 所以以为Lumen 有db 播种功能...谢谢,我尝试另找方法。

标签: php laravel lumen laravel-artisan


【解决方案1】:

我为 bootstrap/app.php 设置了错误的值。

我设置如下。

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    调整后运行composer update 命令以使调整生效。

    【讨论】:

    • 谢谢。我修改了composer.json并运行了composer update,但情况并没有改变。
    【解决方案3】:

    您可以将 php artisan db:seed 与流明一起使用。 命令是:php artisan make:seeder Seedername。 例如,您可以使用 php artisan make:seeder UsersTableSeeder 为用户创建表播种器。 该文件将在文件夹 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();
        }
    }
    

    这将为用户类创建 10 个示例。 然后你应该创建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();
        }
    }
    

    【讨论】:

    • 感谢您的评论。很高兴知道“db:seed”命令确实存在。但是,php artisan db:seed 命令仍然返回“DatabaseSeeder 不存在”错误。
    • 我还是得到了这个:Seeding: UsersTableSeeder In FactoryBuilder.php line 269: Unable to locate factory with name [default] [App\User].
    猜你喜欢
    • 1970-01-01
    • 2015-05-20
    • 2019-02-26
    • 2016-07-12
    • 2020-08-03
    • 2020-03-29
    • 2018-11-18
    • 2017-10-25
    • 2023-03-16
    相关资源
    最近更新 更多