Миграции в Yii-2

6 ноября, 2014
Метки:

Если вы никогда не работали с миграциями в Yii, советую для начала прочесть прошлую статью. В данной статье я буду говорить только об отличиях миграций в Yii2 от миграций в Yii1.x

Запус команды не в protected, а в корне проекта. Запуск не через yiic, а через yii:

php yii migrate/create add_table_pages

Файлы миграций расположены в папке console/migrations

Применение миграций

 php yiic migrate 

В общий абстрактный класс Schema добавлены константы для типов данных.

public function up()
    {
        $this->createTable('news', [
            'id'     => 'pk',
            'title'  => Schema::TYPE_STRING . ' NOT NULL',
            'text'   => Schema::TYPE_TEXT . ' NOT NULL',
            'date_create' => Schema::TYPE_DATETIME,
            'thumb'  => Schema::TYPE_STRING
        ]);
    }

Подробная документация по миграциям на английском тут.


Метки:

Оставить комментарий

8 комментариев »

    Vladimir

    Вы забыли упомянуть транзакции

      Developer

      Про транзакции нужно вообще отдельную статью писать. К сожалению safeUp() и safeDown() это еще не все о транзакциях. И поддерживаются они в разных СУБД по разному. Поэтому зачем забивать ими голову начинающим разработчикам. Тем, кому транзакции нужны, хватит любопытства поискать инфу об этих методах, тем более что они есть в шаблоне миграции. А знания на тему, какая СУБД и в каком виде транзакции поддерживает у них, скорее всего уже есть.


    Lezgin

    Как после создания таблицы добавить в нее какие-нибудь начальные данные в рамках одной миграции? В таблицу users, админа например

      Developer

      $this->createTable(…)
      $this->insert(…)

      Более того, если вам нужны роли, то можно прям в миграции после добавления админа ему роль админа и назначить.
      $admin = Yii::$app->authManager->createRole(‘admin’);
      Yii::$app->authManager->add($admin);
      Yii::$app->authManager->assign($admin, 1);


    Олбанец

    Задавать параметры полей в таком формате совсем не допустимо. Это ломает поддержку альтернативных баз данных.

    public function up()
        {
            $this->createTable('{{%news}}', [
                'id'     => $this->primaryKey(),
                'title'  => $this->string(255)->notNull(),
                'text'   => $this->text()->notNull(),
                'date_create' => $this->datetime(),
                'thumb'  => $this->string()
            ]);
        }
    
      Developer

      Не согласна. Поддержку альтернативных БД это не ломает, если использовать yii\db\Schema


    Ivan Mak

    Как запускать одну миграцию внутри другой?
    Например yii/rbac/migrations/

      Developer

      Лучший способ это отнаследовать свой класс миграции от класса другой миграций:

      class m140930_003227_gallery_manager extends my_module_Migration
      {
          public function up()
          {
              parent::up();
              //...
          }
      }
      

      К сожалению на данный момент этот способ не работает для миграций самого фреимворка, т.к отсутствует namespace. Пойду создам тикет, т.к другого нормального способа выстраивать порядок применения миграций из фреимворка нет.


Оставить комментарий:









Копирование материалов разрешено при наличии активной ссылки на источник