【问题标题】:Class 'UserTableSeeder' does not exist - Laravel 5.0 [php artisan db:seed]'UserTableSeeder' 类不存在 - Laravel 5.0 [php artisan db:seed]
【发布时间】:2016-07-12 10:19:52
【问题描述】:

迁移我的数据库后,我正在尝试一个基本的 php artisan db:seed,但它一直在 cmd 中返回标题错误 -[ReflectionException] Class 'UserTableSeeder' does not exist

我尝试过的事情

  • 更改“UserTableSeeder.php”文件“namespace Database\seeds;”的命名空间和'使用数据库\种子\用户表种子;'在“DatabaseSeeder.php”文件中

以下是迁移

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

    class CreateUsersTable extends Migration {

        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('users', function(Blueprint $table)
            {
                $table->increments('id');
                $table->string('name');
                $table->string('email')->unique();
                $table->string('password', 60);
                $table->rememberToken();
                $table->timestamps();
            });
        }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('users');
    }
}

下面是 UserTableSeeder.php

<?php
use App\User;
use Illuminate\Database\Seeder;

class UserTableSeeder extends Seeder {

    public function run()
    {
        DB::table('users')->delete();

        User::create(['email' => 'foo@bar.com']);
    }
}

下面是DatabaseSeeder.php

<?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class DatabaseSeeder extends Seeder {

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

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

【问题讨论】:

  • 你尝试导入这个(UserTableSeeder)类吗?

标签: php laravel


【解决方案1】:

在你的类中添加命名空间。

<?php

namespace Database\Seeders;
...

之后运行 composer dump-autoload

【讨论】:

    【解决方案2】:

    当我们更改或删除控制器文件或其他文件时,应从代码中的任何位置删除它们的文件。您需要运行命令来刷新您的作曲家

    composer dump-autoload
    

    【讨论】:

      【解决方案3】:

      有时代码是正确的,但您需要运行以下命令才能运行播种器命令。 首先运行这个命令

      composer dumpautoload
      

      然后播种

      php artisan db:seed --class=CreateUsersTable
      

      我希望它会起作用

      【讨论】:

      • composer dump-autoload 在使用不同的 talbe 播种机切换分支后为我做了诀窍
      • composer dump-autoload 和 composer dumpautoload 工作方式相同
      【解决方案4】:

      在数据库/文件夹中创建文件后运行composer dumpautoload

      为什么?

      检查composer.json 自动加载部分,您会看到database/ 文件夹由“类映射”(source) 加载:

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

      Composer docs 将 classmap 描述为:

      在安装/更新期间,类映射引用全部组合到 可以在生成的文件中找到的单个键 => 值数组 供应商/作曲家/autoload_classmap.php。 此地图是通过扫描构建的 对于给定目录/文件中的所有 .php 和 .inc 文件中的类

      您可以使用类映射生成支持来定义自动加载 所有不遵循 PSR-0/4 的库。要配置这个,你 指定所有目录或文件以搜索类。

      添加了重点。每次向database/添加文件时都需要运行composer dumpautoload命令生成新的classmap,否则不会自动加载。

      相比之下,app/ 文件夹使用PSR-4 标准将完全限定的类名转换为文件系统路径。这就是为什么在那里添加文件后不需要dumpautoload

      【讨论】:

      • 我添加了另外两个种子文件,它们运行良好。第三个“卡住”了。我花了半个小时试图弄清楚我做错了什么。您的解决方案就像一个魅力。现在不爱 laravel 开发者,但我爱你! ;-)
      • 谢谢。在 app/ 下添加了一个文件夹以获得更有条理的结构,并且需要更新 composer.json 以进行映射。这对我有用:)
      • 这很有帮助,但最好的解决方案是不要运行composer dumpautoload。如果您在psr-4 部分中添加"Database\\Seeders\\": "database/seeds/",并从classmap 部分中删除其条目,那么一切都会按预期运行,在添加新类时无需运行额外的命令。
      【解决方案5】:

      尝试改变

        $this->call('UserTableSeeder');
      

        $this->call(UserTableSeeder::class);
      

      并尝试运行

       composer dump-autoload
      

      【讨论】:

        猜你喜欢
        • 2015-06-25
        • 2015-11-11
        • 2015-05-20
        • 2018-11-22
        • 2023-03-16
        • 2020-08-07
        • 2018-11-24
        • 2015-09-14
        • 2018-02-16
        相关资源
        最近更新 更多