Laravel 5 - artisan seed [ReflectionException]类SongsTableSeeder不存在

当我运行PHP工匠db:种子时,我得到以下错误:

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


}


}
206912 次浏览

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

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

composer dump-autoload

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

php artisan db:seed

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

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

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

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

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

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

在我们的DatabaseSeeder文件; 那么将抛出另一个错误,说:'DB类未找到' 然后我们应该像下面这样将我们的DB facade添加到CustomTableSeeder文件中:

use Illuminate\Support\Facades\DB;

这对我很管用!

我只使用了一个文件和两个类在它下面:

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


}


}


}

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

我是这样解决的:

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

发生这种情况是因为我更改了文件名。我不知道为什么改动之后就不管用了。

文件SongsTableSeeder.php应该在数据库/种子目录或它的子目录中。

你需要运行:

composer dump-autoload

然后:

php artisan db:seed

或者:

php artisan db:seed --class=SongsTableSeeder

php应该在database/seeds目录下

控制台命令步骤:

composer dump-autoload

然后:

php artisan cache:clear

然后:

php artisan optimize

然后:

php artisan db:seed

或者:

php artisan db:seed --class=SongsTableSeeder
不要忘记composer dump-autoload与自动加载有关 composer.json的/ classmap部分。如果你需要改变种子目录或使用多个目录来存储种子,请注意这一点
"autoload": {
"classmap": [
"database/seeds",
"database/factories"
],
},

如果你已经从任何其他项目复制了种子文件,那么你需要运行artisan命令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找到路径!< / p >

我使用mac与php 7.3!希望这能帮助到在座的各位!

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

我在做什么:

php artisan db:seed --class=RolesPermissionsTableSeeder.php
什么解决了我的问题: 我在做什么:

php artisan db:seed --class=RolesPermissionsTableSeeder

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

<?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 < / p >

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