Миграции Laravel: Класс "не найден"
Я развертываю проект Laravel barebone в Microsoft Azure, но всякий раз, когда я пытаюсь выполнить php artisan migrate
, я получаю ошибку:
[2015-06-13 14:34:05] производство.ОШИБКА: исключение "Symfony\Компонент\Отладка\Исключение\Исключение Fatalerrorexception" с сообщением "Класс "не найден" в D:\home\site\vendor\laravel\framework\src\Illuminate\Database\Migrations\Migrator.php:328
Трассировка стека:
#0 {main}
В чем может быть проблема? Большое вам спасибо
-- редактировать --
Класс миграции
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function(Blueprint $table)
{
$table->bigIncrements('id');
$table->string('name', 50);
$table->string('surname', 50);
$table->bigInteger('telephone');
$table->string('email', 50)->unique();
$table->string('username', 50)->unique();
$table->string('password', 50);
$table->boolean('active')->default(FALSE);
$table->string('email_confirmation_code', 6);
$table->enum('notify', ['y', 'n'])->default('y');
$table->rememberToken();
$table->timestamps();
$table->index('username');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('users');
}
}
12 answers
Для пользователей автоматического загрузчика PSR-4 (composer.json):
Храните папку миграции внутри массива classmap и не включайте ее в объект psr-4 при автоматической загрузке. В качестве миграции основной класс Migrator не поддерживает пространство имен. Например;
"autoload": {
"classmap": [
"app/database/migrations"
],
"psr-4": {
"Acme\\controllers\\": "app/controllers"
}
}
Затем запустите:
php artisan clear-compiled
composer dump-autoload
php artisan optimize
- Сначала очищаются все скомпилированные файлы.
- Вторая обновляет
autoload_psr4.php
и почти опустошаетautoload_classmap.php
. - Третий обновляет
autoload_classmap.php
.
С этого времени в дальнейшем вам не придется делать это снова, и любые новые миграции будут работать правильно.
Если при выполнении миграции вы получаете сообщение об ошибке "Класс не найден", пожалуйста, попробуйте выполнить эту команду.
composer dump-autoload
Затем повторно выполните команду migrate. Смотрите более подробную информацию на официальном сайте (#Запущенные миграции): http://laravel.com/docs/master/migrations#running-migrations
Некоторое время назад у меня была такая же проблема. По-видимому, это распространенная проблема, потому что в документации для Laravel она даже предполагает это: http://laravel.com/docs/master/migrations#running-migrations
В основном все, что вам нужно сделать, это обновить некоторые файлы композитора. Просто запустите:
composer dump-autoload
Это обновит файлы автоматической загрузки composer, а затем вы сможете запустить обычную миграцию, и она должна работать! Самый лучший.
Я также сталкиваюсь с той же проблемой.
Решением для меня было удалить файл миграции И удалить запись из таблицы "миграции" в базе данных.
После этого я побежал
Дамп-загрузка композитора
И, наконец, смог сбросить/откатить миграции.
Просто убедитесь, что имя файла переноса совпадает с именем вашего класса.
Т.е.:
Если имя файла:
xxx_151955_create_post_translations_table.php
Тогда класс должен быть:
CreatePostTranslationsTable
Я удалил один из файлов миграции. столкнулся с той же проблемой, в то время как php artisan migrate:rollback
Затем я попробовал composer dump-autoload
. Снова появилось то же самое.
Я восстановил удаленный файл и попробовал composer dump-autoload
и php artisan migrate:rollback
. Это работает.
У меня была аналогичная ситуация (ошибка "класс не найден") после переноса проекта Laravel 5.2 dev в производство. Производственный сервер искал класс "проект", но имя контроллера было Project.php . Как только я переименовал файл в project.php было хорошо идти.
Для меня проблема заключалась в том, что я назвал свою миграцию 2017_12_15_012645_create_modules_problems.php , с именем класса CreateModulesProblemsTable. Как только я добавил _table в имя файла, все заработало нормально.
Я получал ту же ошибку "Класс не найден" при попытке перенести мой проект. Иногда тебя заводят простые вещи. В моем случае я заметил, что имя моего класса было неверным в моем файле миграции из-за того, что я изменил переименование на ранней стадии и не перенес это изменение повсюду.
После исправления имени класса я выполнил автоматическую загрузку дампа композитора, и моя проблема исчезла.
Кто-то:]
Я по глупости поставил:
namespace database\migrations;
Внутри моей миграции create_users_table.php [2014_10_12_000000_create_users_table.php ]
Я получал аналогичную ошибку - класс "Createuserstable" не найден.
Удаление этой строки вверху решило эту ошибку.
Я думаю, что уже поздно отвечать на этот вопрос, но, возможно, это кому-то поможет.
Если вы изменили имя файла переноса, убедитесь в его внутреннем имени класса.
Например, если я изменю имя миграции с 2018_06_10_079999_create_admins_table.php
на 2018_06_10_079999_create_managers_table.php
, то его внутреннее имя класса также должно измениться с CreateAdminsTable
на CreateManagerTable
.
Просто удалите строку в вашей базе данных в таблице migrations
и это решит проблему. Он больше не будет отображаться при выполнении миграции
Другой способ - просто создать файл, это зависит от того, что вы хотите, в моем случае я хотел избавиться от этой миграции. :)