Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 05.04.2017 20:17:47

Проблема с миграцией

Добрый день.
Кратко о движке: laravel 5.2, БД: MySQL

Прелюдия:
1. Есть файлы миграций, которые все были успешно мигрированы в БД.
2. Сайт наполнялся-наполнялся, база растет.
3. Кто-то сменил название файла миграций (например 2016_01_17_create_cards.php на 2016_01_01_create_cards.php), а возможно и название класса тоже было изменено.
4. При добавлении новой миграции и попытке php artisan migrate выпадает ошибка SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'cards' already exists, тоесть скрипт миграции видит, что есть новый файл, не такой как был ранее и пытается создать и эту таблицу, но она уже существует.

Вопрос: Куда регистрируются миграционные файлы, чтобы добавить этот файл, и чтобы сайт не пытался создать эту таблицу снова? Сделать php artisan migrate:reset нельзя, так-как в базе уже много данных. Разве что, выгрузить все и заново перезалить базу, но должен же быть выход без жесткого перебития базы?

Не в сети

#2 05.04.2017 22:25:04

Re: Проблема с миграцией

Проблему решил вот таким костылем:

if (!Schema::hasTable('cards')) {
    Schema::create('cards', function (Blueprint $table) {
        $table->engine = 'InnoDB';
        // table fields
    });
}

Кто знаком с решением элегантнее, был бы рад прочитать о нем.

Изменено Illia (05.04.2017 22:26:01)

Не в сети

#3 06.04.2017 05:55:40

Re: Проблема с миграцией

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

если нельзя но очень хочется – можно переименовать а потом в таблице migrations везде где развёрнута база подправить имя точно таким же образом. хотя это и хак, но альтернатива – откатывать миграцию с удалением таблицы и накатывать заново. в дев-окружении, особенно если тестовые данные загоняются через Seeder-ы – это норма, но в продакшене ясное дело так нельзя

вообще менять имя миграции только чтобы дату подправить – это вообще незачем делать. вот реально на ровном месте себе проблем ищешь smile

Не в сети

Подвал раздела