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

laravel composer-php laravel-5 artisan

113868 观看

11回复

3304 作者的声誉

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

    }

}
作者: Sasha 的来源 发布者: 2014 年 10 月 1 日

回应 (11)


572

76122 作者的声誉

决定

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

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

composer dump-autoload

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

php artisan db:seed

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

作者: Marcin Nabiałek 发布者: 01.10.2014 02:50

3

1055 作者的声誉

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

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

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

作者: Jason 发布者: 01.10.2014 08:21

0

749 作者的声誉

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

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

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

use Illuminate\Support\Facades\DB;

它对我有用!

作者: ivahidmontazer 发布者: 15.04.2015 03:54

0

6033 作者的声誉

我在其中仅使用了两个类的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)]);

    }

}

}
作者: Vinod Joshi 发布者: 01.05.2015 01:30

-2

607 作者的声誉

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

作者: JamesAD-0 发布者: 01.09.2015 05:41

17

407 作者的声誉

我解决了这个问题:

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

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

作者: Ron van Asseldonk 发布者: 10.02.2016 12:58

9

9221 作者的声誉

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

你需要运行:

composer dump-autoload

然后:

php artisan db:seed

要么:

php artisan db:seed --class=SongsTableSeeder
作者: simhumileco 发布者: 03.08.2017 12:36

2

126 作者的声誉

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

控制台命令步骤:

composer dump-autoload

然后:

php artisan cache:clear

然后:

php artisan optimize

然后:

php artisan db:seed

要么:

php artisan db:seed --class=SongsTableSeeder
作者: Chandrakant Ganji 发布者: 23.04.2018 06:17

2

425 作者的声誉

不要忘记composer dump-autoload与autoload / classmap部分相关的工作composer.json。如果您需要更改seeders目录或使用多个目录来存储播种器,请注意这一点。

"autoload": {
    "classmap": [
      "database/seeds",
      "database/factories"
    ],
},
作者: abenevaut 发布者: 12.11.2018 05:52

0

32 作者的声誉

如果您从任何其他项目复制了seeders文件,那么您需要运行artisan命令,php artisan db:seed否则它没问题。

作者: Shahid Hussain 发布者: 23.11.2018 09:59

0

11 作者的声誉

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

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

我用PHP 7.3的mac!希望能帮助你们中的任何人!

作者: gerald heng 发布者: 25.06.2019 05:15
32x32