Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Добрый день.
Кратко о движке: 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 нельзя, так-как в базе уже много данных. Разве что, выгрузить все и заново перезалить базу, но должен же быть выход без жесткого перебития базы?
Не в сети
Проблему решил вот таким костылем:
if (!Schema::hasTable('cards')) {
Schema::create('cards', function (Blueprint $table) {
$table->engine = 'InnoDB';
// table fields
});
}
Кто знаком с решением элегантнее, был бы рад прочитать о нем.
Изменено Illia (05.04.2017 22:26:01)
Не в сети
нельзя переименовывать файлы миграций. ларавель по имени файла определяет выполнялась миграция или нет
если нельзя но очень хочется – можно переименовать а потом в таблице migrations везде где развёрнута база подправить имя точно таким же образом. хотя это и хак, но альтернатива – откатывать миграцию с удалением таблицы и накатывать заново. в дев-окружении, особенно если тестовые данные загоняются через Seeder-ы – это норма, но в продакшене ясное дело так нельзя
вообще менять имя миграции только чтобы дату подправить – это вообще незачем делать. вот реально на ровном месте себе проблем ищешь
Не в сети
Страницы 1