当我运行 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);
}
}
答案 0 :(得分:559)
您需要将SongsTableSeeder
放入文件SongsTableSeeder.php
中与您拥有DatabaseSeeder.php
文件的目录中。
你需要在你的控制台中运行:
composer dump-autoload
生成新的类映射,然后运行:
php artisan db:seed
我刚试过它。它在Laravel 5中没有问题
答案 1 :(得分:17)
我这样解决了这个问题:
这是因为我对文件名进行了更改。我不知道为什么在改变之后它没有工作。
答案 2 :(得分:9)
文件 SongsTableSeeder.php 应位于数据库/种子目录或其子目录中。
您需要运行:
composer dump-autoload
然后:
php artisan db:seed
或:
php artisan db:seed --class=SongsTableSeeder
答案 3 :(得分:3)
我正在运行最新的Laravel 5 dev版本,如果你更改了命名空间,你需要像这样调用你的种子类:
$this->call('\todoparrot\TodolistTableSeeder');
显然,您需要将todoparrot
替换为指定的命名空间。否则我会收到原始问题中指出的相同错误。
答案 4 :(得分:2)
SongsTableSeeder.php应该在database / seeds目录中
控制台命令步骤:
composer dump-autoload
然后:
php artisan cache:clear
然后:
php artisan optimize
然后:
php artisan db:seed
或:
php artisan db:seed --class=SongsTableSeeder
答案 5 :(得分:2)
不要忘记composer dump-autoload
与自动加载有关
/ composer.json
的/ classmap部分。如果需要更改播种器目录或使用多个目录存储播种器,请多加注意。
"autoload": {
"classmap": [
"database/seeds",
"database/factories"
],
},
答案 6 :(得分:2)
如果您迁移到Laravel 8
,则必须向namespace
类添加seeders
:
<?php
namespace Database\Seeders;
...
接下来,在您的composer.json
文件中,从classmap
部分中删除autoload
块,并添加新的命名空间的类目录映射:
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Seeders\\": "database/seeds/"
}
},
最后,做一个composer dump-autoload
。
有关更多信息: https://laravel.com/docs/8.x/upgrade#seeder-factory-namespaces
答案 7 :(得分:1)
您可能指定了.php
扩展名,但找不到您的课程。
我在做什么:
php artisan db:seed --class=RolesPermissionsTableSeeder.php
什么解决了我的问题: 我在做什么:
php artisan db:seed --class=RolesPermissionsTableSeeder
答案 8 :(得分:0)
如果我们的CustomTableSeeder与DatabaseSeeder位于同一目录中,我们应该使用如下:
$this->call('database\seeds\CustomTableSeeder');
在我们的DatabaseSeeder文件中; 然后会抛出另一个错误:&#39; DB Class not found&#39; 然后我们应该将我们的数据库外观添加到我们的CustomTableSeeder文件中,如下所示:
use Illuminate\Support\Facades\DB;
它对我有用!
答案 9 :(得分: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)]);
}
}
}
答案 10 :(得分:0)
如果您从任何其他项目复制了种子文件,则需要运行artisan命令php artisan db:seed
,否则就可以了。
答案 11 :(得分:0)
我也得到了[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!希望对大家有帮助!
答案 12 :(得分:-1)
我有相同的&#34;反射异常&#34;错误。解决方案是将类文件从dev复制到服务器。愚蠢的错误,但考虑到我们处理了多少文件,每次都很容易忘记将它们复制到服务器上。