yii2 — миграции
В Yii 2 есть механизм миграций. По сути миграции в БД это изменение структуры.
Пример использования:
php yii migrate/create create_tv_table php yii migrate
Создание миграций:
yii migrate/create
name – параметр принимающий имя миграции
После выполнения команды будет создан класс:
class m141018_180924_18102014 extends Migration { public function up() { } public function down() { echo "m141018_180924_18102014 cannot be reverted.\n"; return false; } }
В метод up() содержится код, который должен быть выполнен при накатывании миграции. В методе down() содержится код, который выполнится при откате миграции. Пример миграции:
class m141018_180924_18102014 extends Migration { public function up() { $tableOptions = null; if ($this->db->driverName === 'mysql') { $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE=InnoDB'; } $this->createTable('{{%category}}', [ 'id' => Schema::TYPE_PK, 'title' => Schema::TYPE_STRING . ' NOT NULL', ], $tableOptions); $this->createTable('{{%post}}', [ 'id' => Schema::TYPE_PK, 'title' => Schema::TYPE_STRING . ' NOT NULL', 'anons' => Schema::TYPE_TEXT . ' NOT NULL', 'content' => Schema::TYPE_TEXT . ' NOT NULL', 'category_id' => Schema::TYPE_INTEGER, 'author_id' => Schema::TYPE_INTEGER, 'publish_status' => "enum('" . Post::STATUS_DRAFT . "','" . Post::STATUS_PUBLISH . "') NOT NULL DEFAULT '" . Post::STATUS_DRAFT . "'", 'publish_date' => Schema::TYPE_TIMESTAMP . ' NOT NULL', ], $tableOptions); $this->createIndex('FK_post_author', '{{%post}}', 'author_id'); $this->addForeignKey( 'FK_post_author', '{{%post}}', 'author_id', '{{%user}}', 'id', 'SET NULL', 'CASCADE' ); $this->createIndex('FK_post_category', '{{%post}}', 'category_id'); $this->addForeignKey( 'FK_post_category', '{{%post}}', 'category_id', '{{%category}}', 'id', 'SET NULL', 'CASCADE' ); } public function down() { $this->dropTable('{{%post}}'); $this->dropTable('{{%category}}'); } }
Данная миграция создаёт две таблицы и два внешних ключа.
Для создания таблицы используется метод createTable() принимающий два обязательных параметра, имя таблицы и масив описывающий свойства полей таблицы.
Для создания внешних ключей используются методы createIndex() для создания индекса, принимающий три параметра: имя индекса, имя таблицы и имя поля. И метод addForeignKey() принимающий семь параметров: имя внешнего ключа, имя таблицы и имя поля к которой добавляется ключ, имя таблицы и имя поля на которые ссылается ключ, стратегии при удалении и обновлении.
Для применения миграций используется команда:
yii migrate
Для применения нескольких миграций используется команда:
yii migrate/up 2
где 2 – число применяемых миграций
Для применения определённой версии миграции используется команда:
yii migrate/to 141018_180924
где 141018_180924 – timestamp миграций
Команда для отката миграции
yii migrate/down [step]
[step] – количество отменяемых миграций
Для повторного применения миграции применяется команда
yii migrate/redo [step]
[step] – количество повторно применяемых миграций
Просмотр примененных миграций:
yii migrate/history [limit]
[limit] – количество выводимых записей
Просмотр списка новых миграций, которые ещё не были применены:
yii migrate/new [limit]
[limit] – количество выводимых записей