Laravel 5 - семя ремесленника [ReflectionException] Класс SongsTableSeeder не существует
Когда я запускаю 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
Я решил это, сделав это:
- Скопировать содержимое файла.
- Удалить файл.
- Команда запуска: php artisan make: сеялка.
- Скопируйте содержимое файла обратно в этот файл.
Это произошло потому, что я внес изменения в имя файла. Я не знаю, почему это не сработало после изменения.
Файл SongsTableSeeder.php должен находиться в каталоге базы данных/семена или в его подкаталоге.
Вам нужно запустить:
composer dump-autoload
а затем:
php artisan db:seed
или
php artisan db:seed --class=SongsTableSeeder
Я запускаю самую последнюю версию Laravel 5 dev, и если вы изменили пространство имен, вам нужно будет вызвать ваш семенной класс следующим образом:
$this->call('\todoparrot\TodolistTableSeeder');
Очевидно, вам нужно заменить todoparrot
на указанное пространство имен. В противном случае я получаю ту же ошибку, указанную в исходном вопросе.
SongsTableSeeder.php должен находиться в каталоге database/seed
Консольные команды:
composer dump-autoload
а потом:
php artisan cache:clear
а потом:
php artisan optimize
а потом:
php artisan db:seed
или же:
php artisan db:seed --class=SongsTableSeeder
Не забывайте, что composer dump-autoload
работает с разделом autoload/classmap в composer.json
. Позаботьтесь об этом, если вам нужно изменить каталог сидеров или использовать несколько каталогов для хранения сеялок.
"autoload": {
"classmap": [
"database/seeds",
"database/factories"
],
},
Если наш CustomTableSeeder находится в том же каталоге с DatabaseSeeder, мы должны использовать, как показано ниже:
$this->call('database\seeds\CustomTableSeeder');
в нашем файле DatabaseSeeder; то будет выведена еще одна ошибка, которая гласит: "Класс DB не найден" то мы должны добавить наш фасад БД в наш файл CustomTableSeeder, как показано ниже:
use Illuminate\Support\Facades\DB;
это сработало для меня!
Я использовал только 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)]);
}
}
}
Если вы скопировали файлы сеялок из любого другого проекта, вам нужно запустить команду artisan php artisan db:seed
иначе все в порядке.
я получил [ReflectionException] Class Seeder does not exist
и когда я использую composer dump-autoload
, я получил ошибку preg_match(): JIT compilation failed: no more memory
когда я ее запускаю.
Что я сделал, так это то, что я изменил ;pcre.jit=1
на pcre.jit=Off
в php.ini ! Вы можете найти путь с помощью php --ini
в вашем терминале!
Я использую Mac с PHP 7.3! Надеюсь, это поможет любому из вас, ребята!
У меня была такая же ошибка исключения отражения. Решение заключалось в том, чтобы скопировать файл класса на сервер, от dev, для меня. глупые ошибки, но учитывая, сколько файлов мы имеем дело с его легко забыть копировать их на сервер каждый раз.
Посмотрите другие вопросы по меткам laravel laravel-5 composer-php artisan или Задайте вопрос