Миграции 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');
    }
}
Author: Nikolay Kostov, 2015-06-13

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.

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

 83
Author: Umair Ahmed, 2016-01-28 07:36:57

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

composer dump-autoload 

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

 34
Author: Jambor - MSFT, 2015-06-16 03:34:46

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

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

composer dump-autoload

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

 11
Author: jacurtis, 2015-06-18 15:21:13

Я также сталкиваюсь с той же проблемой.

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

После этого я побежал

Дамп-загрузка композитора

И, наконец, смог сбросить/откатить миграции.

 8
Author: Al Masum Fahim, 2016-04-18 04:05:58

Просто убедитесь, что имя файла переноса совпадает с именем вашего класса.

Т.е.:

Если имя файла:

xxx_151955_create_post_translations_table.php

Тогда класс должен быть:

CreatePostTranslationsTable

 6
Author: Mohammad Kawsara, 2018-05-07 12:53:59

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

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

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

 5
Author: m2j, 2016-06-03 10:10:00

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

 3
Author: mediaguru, 2016-08-08 17:13:11

Для меня проблема заключалась в том, что я назвал свою миграцию 2017_12_15_012645_create_modules_problems.php , с именем класса CreateModulesProblemsTable. Как только я добавил _table в имя файла, все заработало нормально.

 3
Author: Matthew Park, 2018-01-25 00:50:49

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

После исправления имени класса я выполнил автоматическую загрузку дампа композитора, и моя проблема исчезла.

Кто-то:]

 2
Author: Stu, 2017-05-27 14:33:59

Я по глупости поставил:

namespace database\migrations;

Внутри моей миграции create_users_table.php [2014_10_12_000000_create_users_table.php ]

Я получал аналогичную ошибку - класс "Createuserstable" не найден.

Удаление этой строки вверху решило эту ошибку.

 2
Author: Joshua Troy, 2018-03-05 11:29:30

Я думаю, что уже поздно отвечать на этот вопрос, но, возможно, это кому-то поможет.

Если вы изменили имя файла переноса, убедитесь в его внутреннем имени класса.

Например, если я изменю имя миграции с 2018_06_10_079999_create_admins_table.php на 2018_06_10_079999_create_managers_table.php, то его внутреннее имя класса также должно измениться с CreateAdminsTable на CreateManagerTable.

 1
Author: Behnam Azimi, 2018-06-30 13:32:30

Просто удалите строку в вашей базе данных в таблице migrations и это решит проблему. Он больше не будет отображаться при выполнении миграции

Другой способ - просто создать файл, это зависит от того, что вы хотите, в моем случае я хотел избавиться от этой миграции. :)

 0
Author: Dimitar, 2018-06-11 14:39:31