Laravel 5-工匠种子[ReflectionException]类SongsTableSeeder不存在


275

当我运行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);

    }

}

107
composer dump-autoload
Thomas Jensen 2014年

我以为使用Faker \ Factory作为Faker;在做这份工作吗?
萨沙2014年

包含SongsTableSeeder类定义的文件的路径是什么?
Wouter J


这真是糟糕透顶
Luigi Lopez

Answers:


748

您需要将SongsTableSeeder文件放入文件SongsTableSeeder.php所在的目录中DatabaseSeeder.php

并且您需要在控制台中运行:

composer dump-autoload

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

php artisan db:seed

我刚刚测试过。它在Laravel 5中正常工作


1
我没有在播种机类中“使用”该模型。现在工作正常。
2015年

1
composer dumpautoload也飞
Connor Leech

作曲家dump-autoload向我解决了这个问题。作曲家的dump-autoload真正做什么?
路易斯·阿尔梅达

5
@LuísAlmeida会dump-autoload重新生成项目中需要包含的所有类的列表,当项目中有新类时将使用该列表。通常,运行时make:*会添加新创建的类,但是如果您手动创建一个播种器,则不会发生这种情况。至少这就是我从5分钟的搜索中就能理解的方式。我不是专家。
Xander Luciano

我在开发服务器上使用Laravel 5.8尝试了该解决方案,并composer dump-autoload为我工作。
Mycodingproject

19

我这样做解决了:

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

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


2
可能运行作曲家dump-auto会更容易。自动装带器现在正在寻找较旧的文件。因此,如果您通过命令行转储此文件,它将使用新文件生成一个新的自动加载器文件。因此,将来尝试使用此=)
罗恩·范·阿塞尔登克

有关作曲家自动加载器的更多信息,请访问以下网站:getcomposer.org/doc/01-basic-usage.md#autoloading
Ron van Asseldonk '16

van Asseldok,好,composer dump-autoload对我不起作用。我必须重新创建播种器类才能使其正常工作。
М.Б.

这对我有帮助。'composer dump-autoload'也不适用于我,这与我的服务器设置有关,或者是共享服务器。
Derk Jan Speelman,

16

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

您需要运行:

composer dump-autoload

然后:

php artisan db:seed

要么:

php artisan db:seed --class=SongsTableSeeder

1
能够使用“ php artisan db:seed --class = SongsTableSeeder”命令查看“ 解析错误 ”。谢谢!
OmiK

4

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

控制台命令步骤:

composer dump-autoload

然后:

php artisan cache:clear

然后:

php artisan optimize

然后:

php artisan db:seed

要么:

php artisan db:seed --class=SongsTableSeeder

为我工作!尤其是php artisan optimize部分
Moses Ndeda '18

3

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

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

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


3

不要忘记composer dump-autoload与的autoload / classmap部分有关的作品composer.json。如果需要更改播种器目录或使用多个目录存储播种器,请多加注意。

"autoload": {
    "classmap": [
      "database/seeds",
      "database/factories"
    ],
},

0

如果我们的CustomTableSeeder与DatabaseSeeder位于同一目录中,则应使用以下代码:

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

在我们的DatabaseSeeder文件中;然后将引发另一个错误:“未找到数据库类”,然后应将数据库外观添加到我们的CustomTableSeeder文件中,如下所示:

use Illuminate\Support\Facades\DB;

它为我工作!


0

我在下面只使用了带有两个类的SINGLE FILE:

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)]);

    }

}

}

0

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


0

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

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

我在php 7.3中使用mac!希望对您有帮助!


0

您可能指定了.php扩展名,但找不到类。

我在做什么:

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

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

php artisan db:seed --class=RolesPermissionsTableSeeder

-5

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


2
该响应非常模糊,并且与您的特定主机设置有关。尽管您的意见很有价值,但这可能无法帮助开发人员寻找此问题的解决方案。我认为您的问题是由您将问题留给人类将文件复制到服务器引起的。鼓励使用CI管道,在该管道中文件自动部署到服务器:)
charj
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.