Laravel

Ошибка в Laravel 5 «[ReflectionException] Class …TableSeeder does not exist»

Небольшая статья о том, как починить ошибку в Laravel 5 с загрузкой фикстур (Seeder). Данная ошибка встречается у многих любителей популярного PHP фреймворка Laravel. Если вы хотите написать класс (Seeder), который будет заполнять ту или иную таблицу в базе данных записями, то вы точно столкнетесь с данной ошибкой. Выглядит она следующим образом:

Класс UserRoleTableSeeder  должен находится в файлеdatabase/seeds/UserRoleTableSeeder.php и находится в глобальной области видимости.

Пример файла с созданием тестовых данных:

<?php use Illuminate\Database\Seeder; class UserRoleTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { DB::table('user_roles')->insert([ 'name' => 'Администратор', 'code' => 'administrator', ]); DB::table('user_roles')->insert([ 'name' => 'Модератор', 'code' => 'moderator', ]); DB::table('user_roles')->insert([ 'name' => 'Пользователь', 'code' => 'user', ]); DB::table('user_roles')->insert([ 'name' => 'Редактор контента', 'code' => 'content-manager', ]); } }

А также в файле database/seeds/DatabaseSeeder.php необходимо в методе run прописать использование класса UserRoleTableSeeder.

<?php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $this->call(UserRoleTableSeeder::class); } }

Таким образом команда php artisan db:seed  запустит метод run нужного нам класса и заполнит таблицу строками. А чтобы класс была найден необходимо через менеджер зависимостей composer переформировать пути для загрузки. Для этого необходимо выполнить команду composer dump-autoload .

В результате получим рабочий автолоад нашего класса и успешное выполнение команды.

{"time":1561660672444,"blocks":[{"type":"paragraph","data":{"text":"Небольшая статья о том, как починить ошибку в Laravel 5 с загрузкой фикстур (Seeder). Данная ошибка встречается у многих любителей популярного PHP фреймворка Laravel. Если вы хотите написать класс (Seeder), который будет заполнять ту или иную таблицу в базе данных записями, то вы точно столкнетесь с данной ошибкой. Выглядит она следующим образом:"}},{"type":"image","data":{"file":{"url":"/storage/images/wUyO5BIfrqx6VBVUMRhG9wC8igb7APNtPmegWhPS.png","thumbnails":["/storage/images/wUyO5BIfrqx6VBVUMRhG9wC8igb7APNtPmegWhPS_small.png"]},"caption":"","withBorder":false,"stretched":false,"withBackground":false}},{"type":"paragraph","data":{"text":"Класс UserRoleTableSeeder  должен находится в файлеdatabase/seeds/UserRoleTableSeeder.php и находится в глобальной области видимости."}},{"type":"paragraph","data":{"text":"Пример файла с созданием тестовых данных:"}},{"type":"code","data":{"code":"<?php\n\nuse Illuminate\\Database\\Seeder;\n\nclass UserRoleTableSeeder extends Seeder\n{\n /**\n * Run the database seeds.\n *\n * @return void\n */\n public function run()\n {\n DB::table('user_roles')->insert([\n 'name' => 'Администратор',\n 'code' => 'administrator',\n ]);\n DB::table('user_roles')->insert([\n 'name' => 'Модератор',\n 'code' => 'moderator',\n ]);\n DB::table('user_roles')->insert([\n 'name' => 'Пользователь',\n 'code' => 'user',\n ]);\n DB::table('user_roles')->insert([\n 'name' => 'Редактор контента',\n 'code' => 'content-manager',\n ]);\n }\n}"}},{"type":"paragraph","data":{"text":"А также в файле database/seeds/DatabaseSeeder.php необходимо в методе run прописать использование класса UserRoleTableSeeder."}},{"type":"code","data":{"code":"<?php\n\nuse Illuminate\\Database\\Seeder;\n\nclass DatabaseSeeder extends Seeder\n{\n /**\n * Run the database seeds.\n *\n * @return void\n */\n public function run()\n {\n $this->call(UserRoleTableSeeder::class);\n }\n}"}},{"type":"paragraph","data":{"text":"Таким образом команда php artisan db:seed  запустит метод run нужного нам класса и заполнит таблицу строками. А чтобы класс была найден необходимо через менеджер зависимостей composer переформировать пути для загрузки. Для этого необходимо выполнить команду composer dump-autoload ."}},{"type":"paragraph","data":{"text":"В результате получим рабочий автолоад нашего класса и успешное выполнение команды."}},{"type":"image","data":{"file":{"url":"/storage/images/fiMkTeUgDx9TxM5daQ76aHH04IMPXd5R7WnTNgch.png","thumbnails":["/storage/images/fiMkTeUgDx9TxM5daQ76aHH04IMPXd5R7WnTNgch_small.png"]},"caption":"","withBorder":false,"stretched":false,"withBackground":false}}],"version":"2.13.0"}
image

Евгений

Специалист по разработке систем на современных PHP фреймворках.