Миграции Laravel: класс «не найден»

43

Я развертываю проект barebone Laravel для Microsoft Azure, но всякий раз, когда я пытаюсь выполнить php artisan migrate, я получаю сообщение об ошибке:

[2015-06-13 14:34:05] production.ERROR: исключение 'Symfony\Component\Debug\Exception\FatalErrorException' с сообщением 'Class' 'not found' в D:\home\site\vendor\Laravel\рамки\SRC\Осветите\Database\Миграции\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');
    }
}
  • 0
    Не могли бы вы опубликовать свой код миграции?
  • 1
    Просто убедитесь, что вы также следуете решению здесь stackoverflow.com/questions/24413929/…
Теги:
azure

7 ответов

71
Лучший ответ

Для пользователей автозагрузчика 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.

С этого момента вам больше не придется делать это, и все новые миграции будут работать правильно.

  • 0
    Это работает отлично. Но не могли бы вы объяснить, почему это необходимо?
  • 1
    @FelixEve хорошо, потому что у миграций нет пространств имен, поэтому пытаться автоматически загружать их с помощью механизмов пространства имен (psr-4 и т. Д.) Бессмысленно. Категория classmap в composer.json предназначена для таких классов. Приведенные ниже команды просто восстанавливают все сопоставления автозагрузки в соответствии с новыми настройками.
31

Если при выполнении миграции вы получаете сообщение "Class not found", попробуйте запустить эту команду.

composer dump-autoload 

а затем повторно выдаст команду migrate. Подробнее см. на официальном сайте (#Running Migrations): http://laravel.com/docs/master/migrations#running-migrations

  • 0
    У меня сработало
  • 0
    Ничего не работает Дает мне не найденную ошибку. Я прокомментировал файлы миграции по умолчанию (users и password_resets), чтобы они не давали мне "SQLSTATE[42000]: Syntax error specified key was too long; max key length is 767 bytes (SQL error)" (оба [Illuminate\Database\QueryException] и [PDOExeption] . Эти файлы по умолчанию !!! Почему я не могу должным образом использовать эти команды .... Кроме того, миграция: сброс и: откат дают мне Nothing to rollback. дает Nothing to rollback. Вы можете помочь?
11

У меня была такая же проблема некоторое время назад. По-видимому, это распространенная проблема, потому что в документации для Laravel она даже предлагает: http://laravel.com/docs/master/migrations#running-migrations

В основном все, что вам нужно сделать, это обновить некоторые файлы композитора. Просто запустите:

composer dump-autoload

Это обновит файлы автозагрузки композитора, а затем вы сможете запустить обычную миграцию, и это должно сработать! Самый лучший.

7

Я также запускаю ту же проблему.

Решением для меня было удаление файла миграции и удаление записи из таблицы "миграции" в базе данных.

После этого я запустил

композитор dump-autoload

и, наконец, смог выполнить миграции reset/rollback.

5

Я удалил один из файлов миграции. столкнулись с той же проблемой, а php artisan migrate:rollback

Затем я попробовал composer dump-autoload. Снова то же самое получилось.

Я восстановил удаленный файл и попробовал composer dump-autoload и php artisan migrate:rollback. Он работает.

  • 0
    спасибо, у меня сработало :)
  • 0
    рад, что это помогло. мой друг
3

У меня была аналогичная ситуация (ошибка класса не найдена) после переноса проекта Laravel 5.2 dev на производство. Производственный сервер искал класс "проект", но имя контроллера было Project.php. Как только я переименовал файл в project.php, было хорошо идти.

1

При попытке переноса моего проекта я получал тот же самый класс, который не найден. Иногда вы получаете простые вещи. В моем случае я заметил, что мое имя класса было неправильным в моем файле миграции из-за того, что я внес изменения на раннем этапе и не выполнял это изменение.

После исправления имени класса я выполнил композицию dump-autoload, и моя проблема исчезла.

HTH кто-то:]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню