В релизе 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();
}
} |