Как писать миграции в yii framework 2.0
 

Как писать миграции в yii framework 2.0

11 мая 2016 8:36 Категории: Программирование

Наиболее уместный и удобный вариант написания миграций для фреймворка Yii 2.0.

В данной статье вы увидите одну из общепринятых практик написания миграций для популярного фреймворка Yii. Многие проекты блога catine используют данный подход, так как он считается общепринятым в нашей команде разработчиков. Надеюсь, вы используете Linux, как основную операционную систему для разработки. Если же вы используете Windows, то советую вам обратиться к Vagrant и начать использовать unix системы при разработке.

Давайте договоримся, что у нас есть следующая схема данных, которую необходимо реализовать:

  • Таблица articles — таблица, которая уже существует в бд, в миграции будем на нее только ссылаться. Эта сущность обозначает новости на сайте, описывается следующим набором полей:
    • id — идентификатор, первичный ключ
    • title — название новости, текстовое поле
    • content — содержание новости, текстовое поле
  • Таблица tasks — задачи для новостей, сущность будет создаваться в миграции. Имеет следующий набор полей:
    • id — идентификатор, первичный ключ
    • title — текст задачи, текстовое поле
    • sort — поле для сортировки, при создании равно нулю
  • Таблица articles_has_tasks — таблица пересечения задач и новостей, так как у нас связь между таблицами N:M многие ко многим. Имеет следующий набор полей:
    • task_id — ссылка на задачу
    • article_id — ссылка на новость

Для создания миграции необходимо перейти в рабочий каталог с установленным yii framework`ом и выполнить команду:

В нашем случае необходимо будет выполнить команду  php yii migrate/create create_task_table и в ответ на вопрос ответь yes. Более подробно можно увидеть на рисунке:

kak-sozdavat-migratii-yii-framework И после того, как вы увидели заветную надпись New migration created successfully. , можно приступить к написанию кода миграции.

Как учит писать нас документация по yii 2.0 миграции:

Данная миграция уже будет работать, применяться (команда php yii migrate 1 ) и откатываться без ошибок (команда php yii migrate/down 1 ), но не всегда понятно какой sql запрос будет сформирован, поэтому советую вам использовать другой подход написания миграции, более приближенный к sql запросам.

Данную миграцию можно было бы написать следующим образом:

Данный подход дает позволяет более точно определить какой запрос будет сформирован при выполнении миграции, что увеличивает понимание в команде разработчиков. Такой код легче всего читать и писать, так как он максимально приближен к sql. Если у вас остались вопросы, пишите их в комментариях.

  • Антон

    А как быть, если я хочу провести сразу все миграции?

    • Антон

      Или отменить сразу все миграции?

      • Чтобы провести все миграции, которые когда-либо были созданы, но не были проведены, можно командой:
        php yii migrate
        Вам автоматически будет предложено провести все миграции, которые не были выполнены на данной базе. Информация об этом хранится в самой бд — таблица migration.

        А вот отменить все миграции можно только через команду:
        php yii migratedown N
        Где вместо N необходимо указать количество миграций, которые необходимо отменить. Если ввести без указания N, то будет предложено откатить лишь последнюю миграцию.