Когда я запускаю 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);
}
}
Вам нужно поместить SongsTableSeeder
в файл SongsTableSeeder.php
в том же каталоге, где у вас есть файл DatabaseSeeder.php
.
И вам нужно запустить консоль:
composer dump-autoload
чтобы создать новую карту классов, а затем запустить:
php artisan db:seed
Я только что протестировал его. Он работает без проблем в Laravel 5
Reflection exception
.
Я решил это, сделав это:
Это произошло потому, что я внес изменения в имя файла. Я не знаю, почему это не сработало после изменения.
Я запускаю самую последнюю версию Laravel 5 dev, и если вы изменили пространство имен, вам нужно будет вызвать ваш семенной класс следующим образом:
$this->call('\todoparrot\TodolistTableSeeder');
Очевидно, вам нужно заменить todoparrot
на указанное пространство имен. В противном случае я получаю ту же ошибку, указанную в исходном вопросе.
Файл SongsTableSeeder.php должен находиться в каталоге базы данных/семена или в его подкаталоге.
Вам нужно запустить:
composer dump-autoload
а затем:
php artisan db:seed
или
php artisan db:seed --class=SongsTableSeeder
У меня была такая же ошибка исключения отражения. Решение заключалось в том, чтобы скопировать файл класса на сервер, от dev, для меня. глупые ошибки, но учитывая, сколько файлов мы имеем дело с его легко забыть копировать их на сервер каждый раз.
Я использовал только 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)]);
}
}
}
Если наш CustomTableSeeder находится в том же каталоге с DatabaseSeeder, мы должны использовать, как показано ниже:
$this->call('database\seeds\CustomTableSeeder');
в нашем файле DatabaseSeeder; то будет выведена еще одна ошибка, которая гласит: "Класс DB не найден" то мы должны добавить наш фасад БД в наш файл CustomTableSeeder, как показано ниже:
use Illuminate\Support\Facades\DB;
это сработало для меня!
composer dump-autoload
?