При разработке у меня так много проблем с миграциями в laravel.Laravel migration transaction
Я создаю миграцию. Когда я заканчиваю его создание, на середине миграции возникает небольшая ошибка (скажем, ограничение внешнего ключа), которая приводит к сбою «php artisan migrate». Он говорит мне, где ошибка, действительно, но затем миграция переходит в несовместимое состояние, где сделаны все изменения в базе данных, сделанные до ошибки, а не следующие.
Это делает это, когда я исправляю ошибку и перезапускаю migrate, первый оператор терпит неудачу, поскольку столбец/таблица уже создан/изменен. Тогда единственное решение, которое я знаю, - это перейти в мою базу данных и «откат» вручную, что намного дольше.
migrate: rollback пытается откат предыдущих миграций, так как ток не был применен успешно.
Я также попытался обернуть весь свой код в DB :: transaction(), но он все еще не работает.
Есть ли решение для этого? Или мне просто нужно постоянно перекатывать вещи?
редактировать, добавив пример (не писать код схемы строителя, просто какое-то псевдо-код):
Migration1:
Create Table users (id, name, last_name, email)
Migration1 выполняется OK. Через несколько дней мы делаем миграция 2:
Create Table items (id, user_id references users.id)
Alter Table users make_some_error_here
Теперь то, что будет происходить в том, что мигрирует будут называть первое заявление и создать элементы таблицы с его внешним ключом для пользователей. Затем, когда он попытается применить следующее утверждение, это не удастся.
Если мы исправим make_some_error_here, мы не сможем выполнить миграцию, потому что созданная таблица «элементы». Мы не можем откатываться (ни обновлять, ни перезагружать), потому что мы не можем удалить пользователей таблицы, поскольку из элементов таблицы есть ограничение внешнего ключа.
Тогда единственный способ продолжения - перейти в базу данных и удалить элементы таблицы вручную, чтобы перейти в согласованное состояние.
Действительно, это очень раздражает. Я также не нашел способ сделать запуск в транзакции MySQL. Кажется, он игнорирует его полностью, когда я пытаюсь. –
@Blossoming_Flower, операторы DDL в MYSQL нельзя отменить. Прочтите мой ответ для получения более подробной информации и ссылок. Благодарю. –