@matperez

Как одной командой выполнить все миграции из модулей в Yii2?

Здравствуйте!

Есть у меня немолодой проект, в котором скопилось уже огромное количество миграций. Хочется их раскидывать по модулям приложения, чтоб хоть какой-то порядок навести, но:
  • во-первых приложение деплоится автоматизированно и дорабатывать правила деплоя на каждый новый модуль с миграциями не хочется
  • во-вторых можно и руками забыть где-то миграции применить, потому что забыл, что они в этом модуле есть.

Так вот, заморачивался ли кто-нибудь с тем, что бы одной командой выполнять все возможные миграции из всех модулей? Может какой-то общий каталог реализовать что бы модули могли регать свои миграции, а ./yii migrate бы по этому каталогу пробегался и все применял? Может есть какое-то готовое решение для этого?

// UPD: вот такое например решение нашлось https://github.com/deesoft/yii2-console
// UPD2: что-то подобное планируется в 2.1 https://github.com/yiisoft/yii2/issues/9698
  • Вопрос задан
  • 1026 просмотров
Решения вопроса 1
@matperez Автор вопроса
В общем, https://github.com/deesoft/yii2-console оказалось самым простым решением. Использую его.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
bitver
@bitver
1 - можете сделать файл-сценарий с уже прописаными путями
2 - теоретически можно сделать парсер файлов, который находит нужный каталог и скармливает путь стандартной тулзе
Ответ написан
Yii migrate и так находит все миграции, которые не применялись. И применяет их в порядке временного возрастаение по timeStamp.

Для отдельных модулей можно накатывать так

yii migrate --migrationPath=@app/modules/forum/migrations --interactive=0


interactive: логический тип - boolean (по умолчанию true). Указывает, следует ли выполнять миграцию в интерактивном режиме. Если это значение является - true, то пользователю будет выдан запрос, перед выполнением командой определенных действий. Вы можете установить это значение в false если команда используется в фоновом режиме.
Ответ написан
shviktor
@shviktor
В конфиге консольного приложения пропишите controllerMap для контроллера migrate пути до миграций в модулях.
Вот пример:
'controllerMap' => [
        'migrate' => [
            'class' => 'yii\console\controllers\MigrateController',
            'migrationNamespaces' => [
                'app\modules\courses\migrations'
            ],
            // ...
        ],
    ],


И не забываем прописать соответствующий namespace в файлах миграций
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы