Отличие модели от миграции в Laravel
В чем отличие модели от миграции в Laravel? Как я понял: создание миграции - это создание структуры таблицы базы данных, а модель - это все данные внутри таблицы. Распишите подробно.
Ответы (1 шт):
Миграции
создание миграции - это создание структуры таблицы базы данных
Это заблуждение.
Миграция - это класс описывающий действия, которые приводят базу данных из состояния A в состояние B и при необходимости обратно.
Миграции это очень грубо говоря - попытка сделать аналог коммитов и системы контроля версий для базы данных.
Самый распространенный кейс использования миграций следующий:
У вас есть несколько сред исполнения
- среда разработки
- среда тестирования
- производственная среда (production)
Вместе с этим имеются другие условия:
- Кодовая база распространяется через репозиторий системы контроля версий.
- Версии кодовой базы на них отличаются друг от друга.
- Различные версии кодовой базы требуют различное состояние базы данных.
- Нужно иметь возможность быстро, а в идеале автоматически привести состояние базы данных в соответствии с нужной версий кодовой базы
Чтобы обеспечить это используют миграции, которые сопровождают зафиксированные изменения в кодовой базе и производят соответствующие изменения в базе данных.
Пример того как это происходит:
- Разработчик решает задачу в среде разработке на собственной машине.
- В ходе решения задачи ему необходимо произвести в базе данных изменения
- Разработчик фиксирует эти изменения в миграции.
- Разработчик коммитит изменения в кодовой базе и миграцию вместе с ними.
- Разработчик пушит эти изменения в репозиторий, после чего это его ветку сливают с другими ветками в которых параллельно велась разработка другими разработчиками.
- Тестовая среда получает изменения из этой ветки и применяет все необходимые миграции
- Тестировщики тестируют все и говорят что все ок. В идеале должны быть еще unit-тесты и авто-тесы морды но их мы опустим
- Менеджеры одобряют релиз и он идёт на производственную среду.
- Все изменения сливаются в основную ветку
- На производственной среде обновляют ветку.
- На производственной среде применяют миграции, чтобы база данных соответствовала актуальной кодовой базе.
- Происходит непредвиденное и на продакшене все находят критический баг, который проявился только в данных из производственной среде
- Никто не паникует: 13.1 Миграции откатываются 13.2 Версия кодовой базы тоже откатывается
- Виновные наказываются и идут править баги
- А производственная среда работает как будто ничего и не было...Да на прошлой версии, но живая и невредимая. А это главное
Модель
А модель - это класс описывающий модель предметной области.
И это понятие чуть шире чем просто класс, который будет маппится на какую-то таблицу в БД, хотя очень часто применяется именно в этом контексте