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

    }

}

Ответ 1

Вам нужно поместить SongsTableSeeder в файл SongsTableSeeder.php в том же каталоге, где у вас есть файл DatabaseSeeder.php.

И вам нужно запустить консоль:

composer dump-autoload

чтобы создать новую карту классов, а затем запустить:

php artisan db:seed

Я только что протестировал его. Он работает без проблем в Laravel 5

Ответ 2

Я решил это, сделав это:

  • Скопировать содержимое файла.
  • Удалить файл.
  • Команда запуска: php artisan make: сеялка.
  • Скопируйте содержимое файла обратно в этот файл.

Это произошло потому, что я внес изменения в имя файла. Я не знаю, почему это не сработало после изменения.

Ответ 3

Файл SongsTableSeeder.php должен находиться в каталоге базы данных/семена или в его подкаталоге.

Вам нужно запустить:

composer dump-autoload

а затем:

php artisan db:seed

или

php artisan db:seed --class=SongsTableSeeder

Ответ 4

Я запускаю самую последнюю версию Laravel 5 dev, и если вы изменили пространство имен, вам нужно будет вызвать ваш семенной класс следующим образом:

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

Очевидно, вам нужно заменить todoparrot на указанное пространство имен. В противном случае я получаю ту же ошибку, указанную в исходном вопросе.

Ответ 5

SongsTableSeeder.php должен находиться в каталоге database/seed

Консольные команды:

composer dump-autoload

а потом:

php artisan cache:clear

а потом:

php artisan optimize

а потом:

php artisan db:seed

или же:

php artisan db:seed --class=SongsTableSeeder

Ответ 6

Не забывайте, что composer dump-autoload работает с разделом autoload/classmap в composer.json. Позаботьтесь об этом, если вам нужно изменить каталог сидеров или использовать несколько каталогов для хранения сеялок.

"autoload": {
    "classmap": [
      "database/seeds",
      "database/factories"
    ],
},

Ответ 7

Если наш CustomTableSeeder находится в том же каталоге с DatabaseSeeder, мы должны использовать, как показано ниже:

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

в нашем файле DatabaseSeeder; то будет выведена еще одна ошибка, которая гласит: "Класс DB не найден" то мы должны добавить наш фасад БД в наш файл CustomTableSeeder, как показано ниже:

use Illuminate\Support\Facades\DB;

это сработало для меня!

Ответ 8

Я использовал только 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)]);

    }

}

}

Ответ 9

Если вы скопировали файлы сеялок из любого другого проекта, вам нужно запустить команду artisan php artisan db:seed иначе все в порядке.

Ответ 10

я получил [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! Надеюсь, это поможет любому из вас, ребята!

Ответ 11

У меня была такая же ошибка исключения отражения. Решение заключалось в том, чтобы скопировать файл класса на сервер, от dev, для меня. глупые ошибки, но учитывая, сколько файлов мы имеем дело с его легко забыть копировать их на сервер каждый раз.