可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
When I run php artisan db:seed I am getting the following error:
[ReflectionException] Class SongsTableSeeder does not exist
What is going on?
My DatabaseSeeder class:
<?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');
}
}
My SongsTableSeeder class:
<?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);
}
}
回答1:
You need to put SongsTableSeeder
into file SongsTableSeeder.php
in the same directory where you have your DatabaseSeeder.php
file.
And you need to run in your console:
composer dump-autoload
to generate new class map and then run:
php artisan db:seed
I've just tested it. It is working without a problem in Laravel 5
回答2:
I solved it by doing this:
- Copy the file content.
- Remove file.
- Run command: php artisan make:seeder .
- Copy the file content back in this file.
This happened because I made a change in the filename. I don't know why it didn't work after the change.
回答3:
File SongsTableSeeder.php should be in database/seeds directory or in its subdirectory.
You need to run:
composer dump-autoload
and then:
php artisan db:seed
or:
php artisan db:seed --class=SongsTableSeeder
回答4:
I'm running the very latest Laravel 5 dev release, and if you've changed the namespace you'll need to call your seed class like this:
$this->call('\todoparrot\TodolistTableSeeder');
Obviously you'll need to replace todoparrot
with your designated namespace. Otherwise I receive the same error indicated in the original question.
回答5:
SongsTableSeeder.php should be in database/seeds directory
Console command steps:
composer dump-autoload
and then:
php artisan cache:clear
and then:
php artisan optimize
and then:
php artisan db:seed
or:
php artisan db:seed --class=SongsTableSeeder
回答6:
If our CustomTableSeeder is in same directory with DatabaseSeeder we should use like below:
$this->call('database\seeds\CustomTableSeeder');
in our DatabaseSeeder File;
then another error will be thrown that says: 'DB Class not found'
then we should add our DB facade to our CustomTableSeeder File like below:
use Illuminate\Support\Facades\DB;
it worked for me!
回答7:
I have used only SINGLE FILE with TWO classes in it following :
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)]);
}
}
}
回答8:
I had the same "reflection exception" error. The solution was to copy the class file to the server, from dev, for me. dumb mistake, but given how many files we deal with its easy to forget to copy them over to the server every time.
回答9:
Laravel requires a "root" seeder class:
See the artisan help page:
$ php artisan help db:seed
Usage:
db:seed [options]
Options:
--class[=CLASS] The class name of the root seeder [default: "DatabaseSeeder"]
--database[=DATABASE] The database connection to seed
--force Force the operation to run when in production.
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--env[=ENV] The environment the command should run under
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Help:
Seed the database with records
If you want to delete the DatabaseSeeder, you have to define the seeder class with the --class
option.
回答10:
What I did is to recreate the Seeder
again and it works for me.
php artisan make:seeder UsersTableSeeder
回答11:
Do not forgot that the composer dump-autoload
works in relation with the autoload
/ classmap section of composer.json
. Take care about that if you need to change seeders directory or use multiple directories to store seeders.
"autoload": {
"classmap": [
"database/seeds",
"database/factories"
],
},
回答12:
If you have copied the seeders files from any other project then you need to run the artisan command php artisan db:seed
otherwise it is fine.