Проблемы с откатом в Laravel 4

70

Я могу легко запустить миграцию artisan и т.д., но когда я попытаюсь ее отбросить, с миграцией: откат я продолжаю получать эту ошибку,

c:\xampp\htdocs\laravel>php artisan migrate:rollback
{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"Class 'CreateCodesnippetsTable' not found","file":"C:\\xampp\\htdocs\\laravel\\vendor\\laravel\\framework\\src\\Illum
inate\\Database\\Migrations\\Migrator.php","line":301}}

Это ошибка? или как мне отлаживать это?

  • 0
    Пожалуйста, предоставьте файлы миграции, для миграций, которые вы пытаетесь откатить
  • 0
    pastebin.com/z5c7nvZd (в списке)
Показать ещё 2 комментария
Теги:

9 ответов

175

Возможно, вы уже решили эту проблему. Но я замечаю, что по какой-то причине откат часто требует, чтобы вы сначала запускали composer dumpautoload. Даже если ваша миграция работает.

  • 2
    В документации нет этого лакомого кусочка. ( laravel.com/docs/migrations#rolling-back-migrations )
  • 5
    Ты гениальный гений. Если бы я была лиса в течение часа.
Показать ещё 6 комментариев
38

Как раз боролся с этой проблемой в течение нескольких дней, я думаю, теперь я могу предоставить окончательный ответ на решение этой проблемы. Да, большой звонок, который я знаю, но голый со мной...

Первым портом вызова, если вы столкнулись с этой проблемой, является запуск composer dump-autoload. Это должно привести к обновленной версии файла vendor/composer/autoload_classmap.php.

Если autoload_classmap.php не обновляется, у вас может возникнуть проблема с разрешениями, и в этом случае вы можете попробовать sudo composer dump-autoload.

Однако, если autoload_classmap.php обновляется, убедитесь, что он содержит запись для вашего класса миграции (в данном случае CreateCodesnippetsTable). Если для этого класса нет записи, вы должны проверить свой файл composer.json и убедиться, что папка app/database/migrations включена в раздел автозагрузки, например:

"autoload": {
    "classmap": [
        "app/controllers",
        "app/models",
        "app/database/migrations"
    ]
},

Этот последний бит - это то, что меня задело. В ошибочной попытке оптимизировать вещи я вытащил столько, сколько мог, из моего файла composer.json, наивно полагая, что это повлияет только на веб-запросы. Оказывается, это повлияло и на Artisan, поэтому вернув эту строку и запустив composer dump-autoload, я решил проблему для меня.

Наконец, если все это не удается, возможно, есть ошибка в одной из поддерживающих библиотек, которая вызывает проблему, и в этом случае вы можете попробовать обновить с помощью composer update или их изменения. Однако я подозреваю, что это редко будет истинной причиной проблемы.

  • 2
    Отсутствие изменений автозагрузки также может означать неправильный синтаксис в composer.json . Вы будете знать, что при запуске composer dump-autoload в главном проекте, но при запуске php artisan dump-autoload синтаксическая ошибка в composer.json в вашей рабочей среде не будет предупреждена. Если ваши проекты в рабочей среде работают, cd в них и попробуйте запустить composer dump-autoload отдельности.
13

Если вы находитесь в Windows, просто используйте композитор в своей утилите terminal/command line и выполните следующие действия:

composer dump-autoload

Надеюсь, что это поможет!

8

Мне кажется, что нет единственного решения этой ошибки. Я пробовал много предложений, но, наконец, это работает в моем конце.

COMPOSER=composer.json composer dump-autoload

Изображение 3562

8

Из того, что я вижу, я предполагаю, что вы изменили имя класса вручную. В ошибке вы имеете имя класса CreateCodesnippetsTable, но в файле миграции, указанном вами (pastebin), имя класса CreateCodesnippetsTable (обратите внимание на S в фрагментах, я думаю, это то, что вы изменили вручную).

Если вы проверите таблицу миграций в своей базе данных, вы увидите записи для каждой миграции. Когда вы создаете перенос, он будет сохранен в базе данных с этим именем, и метод отката пытается прочитать файл с именем, указанным в базе данных, в случае, если вы его вручную измените, laravel не может найти класс, и вы получаете ошибка.

Чтобы исправить это, вы можете отменить изменения и попробовать откат или вручную отредактировать строку миграции в своей базе данных, чтобы включить правильное имя класса.

Надеюсь, что это поможет.

4

Я исправил его, запустив

composer.phar update

  • 0
    нет необходимости обновлять зависимости, так как единственное, что требуется, - это сбросить автоматически загруженные файлы и восстановить их при обновлении, эта задача также наконец выполняется, но нет необходимости выполнять полное обновление зависимостей, если в этом нет необходимости. просто запустите команду «composer dumpautoload» или «composer.phar dumpautoload» и повторите попытку.
  • 0
    У меня это тоже сработало!
2

загрузите файл composer.phar с сайта laravel и принесите файл composer.phar в корневой каталог папки laravel, затем с терминала зайдите в корневой каталог laravel и запустите обновление composer.phar или просто запустите php artisan дамп-автозагрузку. удачи

1

i столкнулся с той же проблемой и выяснил проблему

Я создал миграцию для добавления новой даты столбца в таблицу PatientReasonOfVisits Я использовал генераторы laravel когда я создаю миграцию, имя класса было

class AddDateToPatientReasonOfVisitsTable

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

имя файла было 2014_09_02_214134_add_date_to_patientreasonofvisitstable.php

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

когда я откатываю миграцию я получил класс, не найденный исключение, какой класс не найден этот

AddDateToPatientreasonofvisitsTable

Примечание: разница между именами классов

почему и как я решил эту проблему я думаю, когда u rollback имя класса разрешено с использованием имени файла миграции, которое в таблице миграции столица и маленькие буквы определяются символами подчеркивания "_" в имени файла

поэтому после переименования файла миграции в 2014_09_02_214134_add_date_to_patient_reason_of_visits_table.php и обязательно запустите компоновщик dump-autoload после переименования файла имя класса правильно разрешено без исключения

0

Я просто удалил таблицу миграции, а затем выполнил команду "php artisan migrate: refresh"

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

Я загораю laravel 5,

Удачи.

Ещё вопросы

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