В Yii 2.0.10 появилась поддержка неймспейсов для миграций. Теперь нет необходимости использовать сторонние решения для поиска миграций в модулях.
ModuleLoader из yii2-core находит все нужные неймспейсы, их необходимо только указать в app/config/console.php
:
'controllerMap' => [
'migrate' => [
'class' => '\yii\console\controllers\MigrateController',
'migrationPath' => null,
'migrationNamespaces' => ModuleLoader::getMigrationNamespaces(dirname(__DIR__)),
],
],
Если в вашем приложении используются миграции старого формата, то необходимо обновить их, выполнив следующих два шага:
- Добавьте неймспейс в каждый файл миграции
<?php
namespace app\profile\migrations;
use extpoint\yii2\base\Migration;
class M151217092337_ProfileInit extends Migration {
// ...
}
- Когда вы запустите
php yii migrate
, то Yii выдаст вам все миграции, даже если они были выполнены ранее. Это происходит потому что в БД, в таблицеmigration
записаны старые имена файлов миграций, без неймспейсов. Добавить новые имена нужно командойphp yii migrate/mark ...
.
Смотрим, что у нас много новых миграций, которые на самоме деле все выполнены:
# php yii migrate
Yii Migration Tool (based on Yii v2.0.11.2)
Total 14 new migrations to be applied:
extpoint\yii2\file\migrations\M160122150406_FileInitTables
app\core\migrations\m170410_094620_upd_users
...
app\core\migrations\m170411_103854_upd_settings
app\gallery\migrations\m170411_104001_gallery_banner_setting
app\core\migrations\M170419022612SettingAddAppTypeAppTypeParams
app\gallery\migrations\M170419025323GallerySettingSetAppType
Apply the above migrations? (yes|no) [no]:^C
Отказываемся выполнять. Находим поиследнюю миграцию, которая выполнялась (в данном примере это m170411_104001_gallery_banner_setting
) и пишем команду:
# php yii migrate/mark 'app\gallery\migrations\m170411_104001_gallery_banner_setting'
Yii Migration Tool (based on Yii v2.0.11.2)
Set migration history at app\gallery\migrations\m170411_104001_gallery_banner_setting? (yes|no) [no]:y
The migration history is set at app\gallery\migrations\m170411_104001_gallery_banner_setting.
No actual migration was performed.