【问题标题】:ReflectionException - Class DatabaseSeeder does not exist , Laravel Seeder [duplicate]ReflectionException - 类 DatabaseSeeder 不存在,Laravel Seeder [重复]
【发布时间】:2015-08-05 03:57:49
【问题描述】:

我在不同的文件夹中有数据库播种程序。当我写 db:seed 控制台显示此错误:

[ReflectionException]   Class DatabaseSeeder does not exist , Laravel Seeder

一类是这样的:

namespace Database\Seeds;
use Illuminate\Support\Facades\DB;
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

use TiposCompromisosTableSeeder;

class DatabaseSeeder extends Seeder {

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {

            Eloquent::unguard();

            $this->call('TiposCompromisosTableSeeder');
    }

}

我的另一门课是

namespace Database\Seeds;

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

class TiposCompromisosTableSeeder extends Seeder{

    public function run(){

        DB::table('tipos')->insert(array(
            'nombre' => 'prioridad',
            'tabla' => 'compromisos',
            'str1' => 'baja',
            'int1' => 1
        ));
    }
}

我尝试过使用

composer dump-autoupload 

但不起作用。

如你所见,我在同一个命名空间中有两个类。

请帮忙。

【问题讨论】:

    标签: php laravel migration eloquent


    【解决方案1】:

    只需将其全部放入 DatabaseSeeder.php 文件中,如下所示:

    use Illuminate\Support\Facades\DB;
    use Illuminate\Database\Seeder;
    use Illuminate\Database\Eloquent\Model;
    
    class DatabaseSeeder extends Seeder {
    
        /**
         * Run the database seeds.
         *
         * @return void
         */
        public function run()
        {
    
                Eloquent::unguard();
    
                $this->call('TiposCompromisosTableSeeder');
        }
    
    }
    
    class TiposCompromisosTableSeeder extends Seeder{
    
        public function run(){
    
            DB::table('tipos')->insert(array(
                'nombre' => 'prioridad',
                'tabla' => 'compromisos',
                'str1' => 'baja',
                'int1' => 1
            ));
        }
    }
    

    【讨论】:

    • 谢谢,但是,如果我想将播种器类放在两个文件中该怎么办?
    • 我在最新安装中的 Laravel 代码在命名空间中没有 DatabaseSeeder 类。如果您要命名空间它以及其他类,您可能需要先在 IoC 容器中注册它们,然后工匠才能找到它们。 Artisan 默认使用 DatabaseSeeder 类,它在没有命名空间的情况下找到该类。将其保持原样并将您的其他类放在其下方的同一文件中会容易得多,因此无需注册即可找到它们(我什至不确定是否可以从控制台工作)。
    • 您只是删除了命名空间。这不是解决方案
    • @ricardovigatti 这是解决方案。 Laravel 种子没有命名空间,因此 CLI 命令 db:seed 将没有对命名空间的引用,只是根中的一个类。但是,多个类/文件并不好。
    【解决方案2】:

    添加 --no-dev 标志有帮助吗?

    composer dump-autoload --no-dev
    

    source

    【讨论】:

      【解决方案3】:

      删除两个类中的命名空间定义,并使用“composer dump-autoload”。

      然后就可以正常使用了。

      【讨论】:

        【解决方案4】:

        解决:通过添加

        命名空间数据库\种子;

        然后运行命令:

        composer dump-autoload --no-dev

        【讨论】:

          【解决方案5】:

          如果您最近升级了 Laravel 版本,请检查您的 composer.json

          您的“自动加载”部分应该类似于下面的 sn-p

          注意:您可能需要在“classmap”下添加“database”条目

          "autoload": {
                  "classmap": [
                    "app/Library",
                    "app/Models",
                    "database"
                  ],
                  "psr-4": {
                      "App\\": "app/"
                  },
                  "files": [
                      "app/Library/helpers.php"
                  ]
              },
          

          然后您应该运行composer dumpautoload 并尝试php artisan db:seed

          【讨论】:

          • 太棒了……在将这一行添加到作曲家并运行作曲家之后,一切正常,错误永远消失了;)谢谢
          【解决方案6】:

          您应该将此行添加到"psr-4" 内的composer.json 文件中:

          "Database\\Seeders\\": "database/seeders/"
          

          这意味着应该是这样的:

          "autoload": {
              "psr-4": {
                  "App\\": "app/",
                  "Modules\\": "Modules/",
                  "Database\\Seeders\\": "database/seeders/"
              }
          },
          

          【讨论】:

            【解决方案7】:

            还要确保项目中存在数据库文件夹。如果您不小心删除了数据库文件夹并运行迁移命令。你也会得到这个错误。

            【讨论】:

              【解决方案8】:

              有必要只改一次,将文件夹种子重命名为seeders。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2016-02-28
                • 2021-04-21
                • 2017-11-17
                • 2015-12-05
                • 2014-01-24
                • 2022-10-25
                • 1970-01-01
                • 2017-04-03
                相关资源
                最近更新 更多