У меня есть файлы миграции, которые создают исходную схему для базы данных, и у меня есть исходные файлы, которые заполняют исходную схему случайными данными и наборами типов.
Мое понимание миграций и семян заключается в том, что всякий раз, когда присоединяется новый член команды, он может просто запускать их и быть в курсе всех изменений базы данных и требуемых данных для работы продукта, плюс вы можете применять изменения к stg и prod, запустив файлы миграции.
Но по мере развития моего проекта появлялись новые типы данных, и единственным способом их применения было создание миграции, которая будет запускать вставки в базу данных.
Проблема, с которой я столкнулся, заключается в том, что ремесленник работает с миграциями и семенами так, что сначала он запускает все миграции, а затем все семена, и, похоже, у меня нет способа указать порядок, в котором они следует запустить. Итак, если я запускаю migrate:refresh --seed, я получаю ошибки, потому что он применяет последние миграции, которые вставляют новые данные (которые могут или не могут, в зависимости от типов, вставленных в начальные значения) до семя вставило свои данные.
Одно из решений, которое мы попробовали, — это также обновить начальные значения и проверить перед применением изменений в миграциях, которые вставляют данные, но это стало очень проблематично поддерживать.
Каково ожидаемое использование миграций и семян для этого сценария?
Обновить Чтобы было понятнее: допустим, у меня есть миграция для создания пользователей: Пользователи:{id, name, type} И у меня есть исходная информация для создания пользователей .
Я запускаю оба, и у меня есть таблица пользователей с кучей пользователей.
Проходит время, и мы решаем, что нам нужна таблица для user_types. Создается миграция, которая создаст новую таблицу и заполнит данные новых типов пользователей и обновлений, чтобы сопоставить текущий user.type с user.type_id.
Разработчики выполняют миграцию, и у них есть обновленная база данных.
К команде присоединяется новый разработчик. Он управляет миграциями. А потом семена. Это нарушает.
Теперь, если мы обновим начальные значения, чтобы они соответствовали последним, мы столкнемся с дублированием данных для таблицы user_types. Чтобы избежать этого, нам понадобится какой-то защитный код при миграции, чтобы не запускать вещи, если нет данных, и обновлять, если они есть.
Вопрос в том, правильный ли это способ использования миграции? Как передать изменение данных всем разработчикам без повторного запуска семян?
Model::truncate()
в качестве отправной точки. - person user2094178   schedule 18.03.2016