Отличие модели от миграции в Laravel

В чем отличие модели от миграции в Laravel? Как я понял: создание миграции - это создание структуры таблицы базы данных, а модель - это все данные внутри таблицы. Распишите подробно.


Ответы (1 шт):

Автор решения: Михаил Ребров

Миграции

создание миграции - это создание структуры таблицы базы данных

Это заблуждение.

Миграция - это класс описывающий действия, которые приводят базу данных из состояния A в состояние B и при необходимости обратно.
Миграции это очень грубо говоря - попытка сделать аналог коммитов и системы контроля версий для базы данных.

Самый распространенный кейс использования миграций следующий:

У вас есть несколько сред исполнения

  • среда разработки
  • среда тестирования
  • производственная среда (production)

Вместе с этим имеются другие условия:

  • Кодовая база распространяется через репозиторий системы контроля версий.
  • Версии кодовой базы на них отличаются друг от друга.
  • Различные версии кодовой базы требуют различное состояние базы данных.
  • Нужно иметь возможность быстро, а в идеале автоматически привести состояние базы данных в соответствии с нужной версий кодовой базы

Чтобы обеспечить это используют миграции, которые сопровождают зафиксированные изменения в кодовой базе и производят соответствующие изменения в базе данных.

Пример того как это происходит:

  1. Разработчик решает задачу в среде разработке на собственной машине.
  2. В ходе решения задачи ему необходимо произвести в базе данных изменения
  3. Разработчик фиксирует эти изменения в миграции.
  4. Разработчик коммитит изменения в кодовой базе и миграцию вместе с ними.
  5. Разработчик пушит эти изменения в репозиторий, после чего это его ветку сливают с другими ветками в которых параллельно велась разработка другими разработчиками.
  6. Тестовая среда получает изменения из этой ветки и применяет все необходимые миграции
  7. Тестировщики тестируют все и говорят что все ок. В идеале должны быть еще unit-тесты и авто-тесы морды но их мы опустим
  8. Менеджеры одобряют релиз и он идёт на производственную среду.
  9. Все изменения сливаются в основную ветку
  10. На производственной среде обновляют ветку.
  11. На производственной среде применяют миграции, чтобы база данных соответствовала актуальной кодовой базе.
  12. Происходит непредвиденное и на продакшене все находят критический баг, который проявился только в данных из производственной среде
  13. Никто не паникует: 13.1 Миграции откатываются 13.2 Версия кодовой базы тоже откатывается
  14. Виновные наказываются и идут править баги
  15. А производственная среда работает как будто ничего и не было...Да на прошлой версии, но живая и невредимая. А это главное

Модель

А модель - это класс описывающий модель предметной области.
И это понятие чуть шире чем просто класс, который будет маппится на какую-то таблицу в БД, хотя очень часто применяется именно в этом контексте

→ Ссылка