В релизе 2.5.3 добавилась возможность отображать и выполнять различный список миграций для разных окружений, это бывает необходимо когда, например, для тестовой среды нужны какие-либо промежуточные миграции, а для продакшена основные.
Раньше это было возможно сделать, например, сделав несколько директорий для миграций и меняя програмно конфиг
/local/php_interface/migrations.cfg.php или /bitrix/php_interface/migrations.cfg.php
<?php $config = [ 'migration_dir' => '/migrations_prod/', ]; if (\MyProject::IsDev()){ $config['migration_dir'] = '/migrations_dev'; } return $config; |
где \MyProject::IsDev()) - ваша функция определяющая текущее окружение
Однако не всем было удобно хранить миграции в разных директориях и перетаскивать их из одной в другую, поэтому добавил еще параметр для фильтрации списка
<?php $config = [ 'migration_dir' => '/migrations/', ]; if (\MyProject::IsDev()){ $config['version_filter'] = [ 'env' => 'dev', ]; } return $config; |
Теперь задав в самом файле миграции такой фильтр можно отделить ее от общего списка и показывать и выполнять только для тестового окружения определенного вашим методом \MyProject::IsDev()
<?php namespace Sprint\Migration; class Version20171219185225 extends Version { protected $description = ""; protected $versionFilter = [ 'env' => 'dev', ]; } |
ключей в фильтрах может быть сколько угодно, но для отображения в списке все ключи\значения в конфиге должны присутствовать в классе миграции
Такой же фильтрации списка можно добиться переопределив метод isVersionEnabled() - опишите условие по которому показывать или нет миграцию в списке и соответственно выполнять ее при накате\откате всех сразу (команды php migrate.php migrate , php migrate.php up )
<?php namespace Sprint\Migration; class Version20171219185225 extends Version { public function isVersionEnabled() { return \MyProject::IsDev(); } } |