314

当我运行php artisan db:seed时,出现以下错误:

[ReflectionException] Class SongsTableSeeder does not exist

到底是怎么回事?

我的DatabaseSeeder 类:

<?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('SongsTableSeeder');
    }

}

我的SongsTableSeeder 类:

<?php

// Composer: "fzaninotto/faker": "v1.4.0"
use Faker\Factory as Faker;
use Illuminate\Database\Seeder;
use DB;

class SongsTableSeeder extends Seeder {

    public function run()
    {
        $faker = Faker::create();
        $songs = [];
        foreach(range(1, 10) as $index)
        {
            $songs[] = ['title' => $faker->words(rand(1,4))];
        }

        DB::table('songs')->insert($songs);

    }

}
4

13 回答 13

856

您需要将SongsTableSeeder文件SongsTableSeeder.php放入您拥有DatabaseSeeder.php文件的同一目录中。

你需要在你的控制台中运行:

composer dump-autoload

生成新的类映射,然后运行:

php artisan db:seed

我刚刚测试过了。它在 Laravel 5 中没有问题

于 2014-10-01T14:50:33.023 回答
24

我通过这样做解决了它:

  1. 复制文件内容。
  2. 删除文件。
  3. 运行命令: php artisan make:seeder 。
  4. 将文件内容复制回此文件中。

发生这种情况是因为我更改了文件名。我不知道为什么它在更改后不起作用。

于 2016-02-10T12:58:33.343 回答
20

文件SongsTableSeeder.php应该在database/seeds目录或其子目录中。

你需要运行:

composer dump-autoload

接着:

php artisan db:seed

或者:

php artisan db:seed --class=SongsTableSeeder
于 2017-08-03T12:36:44.267 回答
13

如果您迁移到,则必须在类Laravel 8中添加一个:namespaceseeders

<?php

namespace Database\Seeders;

...

接下来,在您的composer.json文件中,classmap从该部分中删除块autoload并添加新的命名空间类目录映射:

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

最后,做一个composer dump-autoload

欲了解更多信息: https ://laravel.com/docs/8.x/upgrade#seeder-factory-namespaces

于 2020-10-24T17:39:18.797 回答
6

SongsTableSeeder.php 应该在 database/seeds 目录中

控制台命令步骤:

composer dump-autoload

接着:

php artisan cache:clear

接着:

php artisan optimize

接着:

php artisan db:seed

或者:

php artisan db:seed --class=SongsTableSeeder
于 2018-04-23T06:17:13.510 回答
4

我正在运行最新的 Laravel 5 开发版本,如果你更改了命名空间,你需要像这样调用你的种子类:

$this->call('\todoparrot\TodolistTableSeeder');

显然,您需要替换todoparrot为您指定的命名空间。否则,我会收到原始问题中指出的相同错误。

于 2014-10-01T20:21:53.057 回答
3

不要忘记composer dump-autoloadcomposer.json. 如果您需要更改播种机目录或使用多个目录来存储播种机,请注意这一点。

"autoload": {
    "classmap": [
      "database/seeds",
      "database/factories"
    ],
},
于 2018-11-12T17:52:13.883 回答
1

您可能指定了.php扩展名,但它没有找到您的课程。

我在做什么:

php artisan db:seed --class=RolesPermissionsTableSeeder.php

什么解决了我的问题:我在做什么:

php artisan db:seed --class=RolesPermissionsTableSeeder
于 2020-04-07T22:29:01.807 回答
0

如果我们的 CustomTableSeeder 与 DatabaseSeeder 在同一目录中,我们应该使用如下:

$this->call('database\seeds\CustomTableSeeder');

在我们的 DatabaseSeeder 文件中;然后会抛出另一个错误,上面写着:'DB Class not found' 然后我们应该将我们的 DB 外观添加到我们的 CustomTableSeeder 文件中,如下所示:

use Illuminate\Support\Facades\DB;

它对我有用!

于 2015-04-15T15:54:38.480 回答
0

我只使用了包含以下两个类的单个文件:

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

use Faker\Factory as Faker;

class DatabaseSeeder extends Seeder {

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

    Model::unguard();

    $this->call("LessonsTableSeeder");


}

}

class LessonsTableSeeder extends Seeder {

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

    $faker = Faker::create();

    foreach(range(1,30) as $index) {

        Lesson::create(['title' => $faker->sentence(5), 'body' => $faker->paragraph(4)]);

    }

}

}
于 2015-05-01T13:30:09.877 回答
0

如果您从任何其他项目复制了播种机文件,那么您需要运行 artisan 命令php artisan db:seed,否则就可以了。

于 2018-11-23T09:59:14.417 回答
0

我也有[ReflectionException] Class Seeder does not exist,当我使用时,我运行它时composer dump-autoload出错。preg_match(): JIT compilation failed: no more memory

我所做的是我在php.ini;pcre.jit=1中更改!您可以在终端中使用找到路径!pcre.jit=Offphp --ini

我正在使用带有 php 7.3 的 mac!希望对你们中的任何人有帮助!

于 2019-06-25T05:15:24.507 回答
-5

我有同样的“反射异常”错误。解决方案是为我将类文件从 dev 复制到服务器。愚蠢的错误,但考虑到我们处理了多少文件,很容易忘记每次都将它们复制到服务器。

于 2015-09-01T05:41:34.617 回答