ChatGPT解决这个技术问题 Extra ChatGPT

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

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

    }

}
composer dump-autoload ?
我想用 Faker\Factory 作为 Faker;正在做这项工作吗?
包含 SongsTableSeeder 类定义的文件的路径是什么?
这是垃圾和坏

M
Marcin Nabiałek

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

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

composer dump-autoload

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

php artisan db:seed

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


我没有在我的播种机课上“使用”这个模型。现在工作正常。
composer dumpautoload 也会飞
composer dump-autoload 为我解决了这个问题。 composer dump-autoload 真正做了什么?
@LuísAlmeida dump-autoload 重新生成需要包含在项目中的所有类的列表,当您在项目中有一个新类时使用它。通常运行 make:* 将添加新创建的类,但如果您手动创建播种器,则不会发生这种情况。至少这就是我从 5 分钟的搜索中理解它的工作方式。我不是专家。
我在开发服务器上使用 Laravel 5.8 尝试了这个解决方案,composer dump-autoload 为我工作。
s
silver est

我通过这样做解决了它:

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

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


可能运行 composer dump-auto 更容易。自动加载器现在正在寻找一个较旧的文件。因此,如果您通过命令行转储此文件,它将使用新文件生成一个新的自动加载器文件。所以以后试试这个=)
有关作曲家自动加载器的详细信息,请参阅此站点:getcomposer.org/doc/01-basic-usage.md#autoloading
van Asseldok,好吧,composer dump-autoload 对我不起作用。我必须重新创建播种机类以使其正常工作。
这对我有帮助。 'composer dump-autoload' 对我也不起作用,这与我的服务器设置有关,或者它是共享服务器这一事实。
s
simhumileco

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

你需要运行:

composer dump-autoload

接着:

php artisan db:seed

或者:

php artisan db:seed --class=SongsTableSeeder

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

如果您迁移到 Laravel 8,则必须将 namespace 添加到 seeders 类:

<?php

namespace Database\Seeders;

...

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

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

最后,执行 composer dump-autoload

有关详细信息:https://laravel.com/docs/8.x/upgrade#seeder-factory-namespaces


正是缺少什么!谢谢
这需要得到更多的支持。在这里,接受我的投票并感谢。
C
Chandrakant Ganji

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 部分
J
Jason Gilmore

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

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

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


a
abenevaut

不要忘记 composer dump-autoloadcomposer.json 的自动加载/类映射部分相关。如果您需要更改播种机目录或使用多个目录来存储播种机,请注意这一点。

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

A
Axel Paris

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

我在做什么:

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

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

php artisan db:seed --class=RolesPermissionsTableSeeder

ح
حضور و غیاب با نرم افزار

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

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

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

use Illuminate\Support\Facades\DB;

它对我有用!


V
Vinod Joshi

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

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

    }

}

}

S
Shahid Hussain

如果您从任何其他项目复制了播种机文件,则需要运行工匠命令 php artisan db:seed 否则没问题。


g
gerald heng

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

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

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


K
Krina Mangukiya

当您将项目迁移到 Laravel 8 并收到该错误时,您应该遵循以下给出的一些步骤。

1.转到您的 composer.json 文件。

2.更改自动加载部分

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

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

3.现在运行composer dump-autoloadcomposer update的命令

4.最后一次运行php artisan db:seed的命令


J
JamesAD-0

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


此响应非常模糊,并且与您的特定托管设置相结合。尽管您的意见很有价值,但这可能无助于开发人员寻找此问题的解决方案。我认为您的问题是由于您将其留给人类将文件复制到服务器而引起的。鼓励有一个 CI 管道,其中文件自动部署到服务器:)

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅