При разработке у меня так много проблем с миграциями в laravel.
Я создаю миграцию. Когда я завершу его создание, небольшая ошибка в середине миграции (скажем, ограничение внешнего ключа), которая приводит к ошибке "php artisan migrate". Он говорит мне, где ошибка, действительно, но затем миграция переходит в несогласованное состояние, где сделаны все изменения в базе данных, сделанные до ошибки, а не следующие.
Это делает это, когда я исправляю ошибку и повторно запускаю migrate, первый оператор терпит неудачу, поскольку столбец/таблица уже создан/изменен. Тогда единственное решение, которое я знаю, - это перейти в мою базу данных и "откат" вручную, что намного дольше.
migrate: rollback пытается отменить предыдущие миграции, так как текущий не был успешно применен.
Я также попытался обернуть весь мой код в DB:: transaction(), но он все еще не работает.
Есть ли какое-либо решение для этого? Или мне просто нужно постоянно перекатывать вещи?
редактировать, добавляя пример (не записывая код компоновщика схемы, просто какой-то псевдокод):
Migration1:
Create Table users (id, name, last_name, email)
Миграция1 выполнена ОК. Через несколько дней мы делаем Migration 2:
Create Table items (id, user_id references users.id)
Alter Table users make_some_error_here
Теперь произойдет то, что migrate вызовет первый оператор и создаст элементы таблицы с его внешним ключом для пользователей. Затем, когда он попытается применить следующее утверждение, он потерпит неудачу.
Если мы исправим make_some_error_here, мы не сможем выполнить миграцию, потому что созданная таблица "элементы". Мы не можем откатить (и не обновить, ни reset), потому что мы не можем удалить пользователей таблицы, так как есть ограничение внешнего ключа из элементов таблицы.
Тогда единственный способ продолжить - это перейти в базу данных и вручную удалить элементы таблицы, чтобы перейти в согласованное состояние.