Laravel 5 - 工匠种子 [反射例外] 类歌曲表播种器不存在



当我运行php artisan db:seed时,我收到以下错误:

[ReflectionException] Class SongsTableSeeder does not exist

这是怎么回事?

我的数据库播种器类:

<?php
use IlluminateDatabaseSeeder;
use IlluminateDatabaseEloquentModel;
class DatabaseSeeder extends Seeder {
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Model::unguard();
        $this->call('SongsTableSeeder');
    }
}

我的歌曲表播种机类:

<?php
// Composer: "fzaninotto/faker": "v1.4.0"
use FakerFactory as Faker;
use IlluminateDatabaseSeeder;
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);
    }
}

您需要将SongsTableSeeder放入文件SongsTableSeeder.php中,该目录位于DatabaseSeeder.php文件的同一目录中。

您需要在控制台中运行:

composer dump-autoload

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

php artisan db:seed

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

我通过这样做解决了它:

  1. 复制文件内容。
  2. 删除文件。
  3. 运行命令:php 工匠制作:播种机。
  4. 将文件内容复制回此文件中。

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

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

您需要运行:

composer dump-autoload

然后:

php artisan db:seed

或:

php artisan db:seed --class=SongsTableSeeder

如果您迁移到 Laravel 8 ,则必须向seeders类添加一个namespace

<?php
namespace DatabaseSeeders;
...

接下来,在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

SongsTableSeeder.php 应该在数据库/种子目录中

控制台命令步骤:

composer dump-autoload

然后:

php artisan cache:clear

然后:

php artisan optimize

然后:

php artisan db:seed

或:

php artisan db:seed --class=SongsTableSeeder

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

$this->call('todoparrotTodolistTableSeeder');

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

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

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

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

我在做什么 :

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

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

php artisan db:seed --class=RolesPermissionsTableSeeder

当您将项目迁移到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的最后运行命令

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

$this->call('databaseseedsCustomTableSeeder');

在我们的数据库播种器文件中;然后将抛出另一个错误,说:"找不到数据库类"然后我们应该将我们的数据库外观添加到我们的 CustomTableSeeder 文件中,如下所示:

use IlluminateSupportFacadesDB;

它对我有用!

我只使用了带有两个类的单个文件:

use IlluminateDatabaseSeeder;
use IlluminateDatabaseEloquentModel;
use AppLesson;
use FakerFactory 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)]);
    }
}
}

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

我也得到了[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!希望对你们中的任何人有所帮助!

只需更改:

$this->call('SongsTableSeeder')

$this->call(SongsTableSeeder::class)

我遇到了同样的"反射异常"错误。解决方案是将类文件从 dev 复制到服务器,对我来说。愚蠢的错误,但考虑到我们处理的文件数量,每次都很容易忘记将它们复制到服务器。

相关内容

  • 没有找到相关文章

最新更新