Laravel 5 - майстерне насіння [ReflectionException] Класні пісніTableSeeder не існує


275

Коли я запускаю 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');
    }

}

Клас My 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);

    }

}

107
composer dump-autoload?
Томас Дженсен

Я думав використовувати Faker \ Factory як Faker; робить роботу?
Саша

Який шлях до файлу, що містить SongsTableSeederвизначення класу?
Wouter J


Це смітник і погано
Луїджі Лопес

Відповіді:


748

Вам потрібно ввести SongsTableSeederфайл SongsTableSeeder.phpу той самий каталог, де ви маєте свій DatabaseSeeder.phpфайл.

І вам потрібно запустити в консолі:

composer dump-autoload

щоб створити нову карту класу, а потім запустити:

php artisan db:seed

Я щойно це випробував. У Laravel 5 це працює без проблем


1
Я не використовував модель у своєму сімейному класі. Зараз добре працює.
Джеймі Пул

1
composer dumpautoloadтакож летить
Connor Leech

композитор dump-autoload вирішив мені проблему. що насправді робить композиційний dump-autoload?
Luís Almeida

5
@ LuísAlmeida dump-autoloadвідновлює список усіх класів, які потрібно включити в проект, він використовується, коли у вас є новий клас всередині вашого проекту. Зазвичай запущений make:*додасть новостворений клас, але це не відбудеться, якщо ви створили сівалку вручну. Принаймні, так я розумію, що це працює з 5 хвилин пошуку. Я не експерт.
Ксандер Лучано

Я спробував це рішення з Laravel 5.8 на сервері розробки і composer dump-autoloadпрацював на мене.
Mycodingproject

19

Я вирішив це, зробивши це:

  1. Скопіюйте вміст файлу.
  2. Видалити файл.
  3. Виконати команду: php artisan make: seeder.
  4. Скопіюйте вміст файлу назад у цей файл.

Це сталося тому, що я змінив ім’я файлу. Я не знаю, чому це не вийшло після зміни.


2
Можливо, запустити композицію dump-auto було простіше. Автозавантажувач зараз шукає старіший файл. Отже, якщо ви скинете цей файл за допомогою командного рядка, він створить новий файл автозавантажувача з новим файлом. Тож у майбутньому спробуйте це =)
Рон ван Ассельдонк

Більше інформації про автозавантажувач композицій див. На цьому веб-сайті: getcomposer.org/doc/01-basic-usage.md#autoloading
Рон ван Ассельдонк

ван Ассельдок, ну, composer dump-autoloadне працює для мене. Я повинен відтворити клас сівалки, щоб він працював.
М.Б.

Це мені допомогло. "Композитор dump-autoload" також не працює для мене, щось стосується моїх налаштувань сервера або того, що це загальна версія.
Derk Jan Speelman

16

Файл SongsTableSeeder.php повинен бути в базі даних / насінні каталогах або в його підкаталозі.

Вам потрібно запустити:

composer dump-autoload

і потім:

php artisan db:seed

або:

php artisan db:seed --class=SongsTableSeeder

1
вміє бачити помилку розбору за допомогою команди 'php artisan db: seed --class = SongsTableSeeder'. дякує !!
OmiK

4

SongsTableSeeder.php має бути в каталозі бази даних / насіння

Етапи командної консолі:

composer dump-autoload

і потім:

php artisan cache:clear

і потім:

php artisan optimize

і потім:

php artisan db:seed

або:

php artisan db:seed --class=SongsTableSeeder

Працювали для мене! Особливо та php artisan optimizeчастина
Мойсей Ндеда

3

Я запускаю найновіший реліз Laravel 5 Dev, і якщо ви змінили простір імен, вам потрібно буде зателефонувати до вашого початкового класу так:

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

Очевидно, вам потрібно буде замінити todoparrotпризначений простір імен. Інакше я отримую ту саму помилку, яку вказано в оригінальному запитанні.


3

Не забувайте, що це composer dump-autoloadпрацює у відношенні розділу автозавантаження / однокласника composer.json. Подбайте про це, якщо вам потрібно змінити каталог сівалок або використовувати декілька каталогів для зберігання сівалок.

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

0

Якщо наш CustomTableSeeder знаходиться в одному каталозі з DatabaseSeeder, ми повинні використовувати наступне:

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

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

use Illuminate\Support\Facades\DB;

це працювало на мене!


0

Я використовував лише ОДИН ФАЙЛ з двома класами в ньому наступним чином:

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

    }

}

}

0

Якщо ви скопіювали файли сівалок з будь-якого іншого проекту, вам потрібно запустити команду artisan, php artisan db:seedінакше це добре.


0

Я [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! Сподіваюся, що допоможе комусь із вас, хлопці, там!


0

Ви, ймовірно, вказуєте .php розширення, і він не знайшов ваш клас.

Що я робив:

php artisan db:seed --class=RolesPermissionsTableSeeder.php

Що вирішило мою проблему: Що я робив:

php artisan db:seed --class=RolesPermissionsTableSeeder

-5

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


2
Ця відповідь дуже розпливчаста і поєднується з вашими конкретними налаштуваннями хостингу. Хоча ваш внесок цінується, це може не допомогти розробникам шукати рішення цієї проблеми. Я думаю, що ваша проблема викликана тим, що ви залишаєте людині копіювати файли на сервер. Рекомендується мати конвеєр CI, де файли автоматично розгортаються на сервер :)
charj
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.