Class' UserTableSeeder'不存在 - Laravel 5.0 [php artisan db:seed]

时间:2016-03-24 17:47:32

标签: php laravel

我在迁移我的数据库之后尝试了一个基本的php工匠db:seed但是它一直在cmd中返回标题错误 - [ReflectionException] Class' UserTableSeeder'不存在

我尝试过的事情

  • 更改' UserTableSeeder.php'的名称空间。文件&命名空间数据库\种子;'和'使用Database \ seeds \ UserTableSeeder;'在' 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');
    }
}

5 个答案:

答案 0 :(得分:47)

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

<强>为什么吗

检查composer.json自动加载部分,您会看到“{1}}文件夹已加载”classmap“(source):

database/

作曲家docs将类图描述为:

  

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

     

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

重点补充。每次将文件添加到"autoload": { "classmap": [ "database" ], "psr-4": { "App\\": "app/" } }, 时,都需要运行composer dumpautoload命令生成新的类图,否则不会自动加载。

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

答案 1 :(得分:20)

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

composer dump-autoload

答案 2 :(得分:12)

尝试更改

  $this->call('UserTableSeeder');

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

并尝试运行

 composer dump-autoload

答案 3 :(得分:2)

有时代码是正确的,但是您需要运行以下命令才能运行seeder命令。 首先运行此命令

composer dumpautoload

然后播种播种机

php artisan db:seed --class=CreateUsersTable

我希望它能起作用

答案 4 :(得分:-1)

在类中添加命名空间。

<?php

namespace Database\Seeders;
...

之后运行 composer dump-autoload