Набросок
Миграция данных-это операция переноса таблиц базы данных в командообразовании для достижения синхронизации информации и унификации данных между командами.
Миграция базы данных
Общие шаги:
1. В процессе миграции yii 2 он обычно используется для изменения таблицы данных базы данных, в основном для работы со структурой и небольшой частью данных (редко встречаются большие данные, если сталкиваются с большим объемом данных, напрямую экспортируют и импортируют таблицу данных).
2. Создайте или измените таблицы базы данных локально и выполните инструкции на заднем конце:./Yii миграция/создание < имя создания_таблицы >
3. Когда серверная часть выполняет инструкции по переносу, она генерирует сценарий переноса. Этот скрипт в основном используется для хранения инструкций SQL и загружает их вместе с выпуском кода, чтобы другие участники могли синхронизировать базу данных и осуществлять реальную миграцию данных.
4. Когда другие участники возвращают последний код в локальную область, они выполняются./Yii миграция для обновления статуса миграции данных и синхронизации последней миграции данных в локальную область.
концепция
При разработке и обслуживании приложения, управляемого базой данных, структура базы данных изменяется вместе с кодом.
Например, в процессе разработки приложения будет добавлена и должна быть добавлена новая таблица; после развертывания приложения в рабочей среде потребуется индекс для повышения производительности запросов и так далее. Поскольку исходный код часто требуется изменять при изменении структуры базы данных, Yii предоставляет функцию переноса базы данных, которая записывает изменения в базе данных, чтобы база данных и исходный код были версиями вместе.
Следующие шаги показывают нам, как инструменты миграции баз данных используются командами разработчиков:
Тим создает новый объект миграции (например, создает новую форму, изменяет определение полей и т. Д.).
Тим отправляет этот новый объект миграции в систему управления кодом (например, Git, Mercurial).
Дуг обновляет версию из системы управления кодом и получает новый объект миграции.
Даг отправляет перенесенный объект в локальную базу данных разработки, чтобы Даг синхронизировал изменения, внесенные Тимом.
Следующие шаги показывают нам, как выпустить новую версию с миграцией базы данных в рабочие среды:
Скотт создает тег выпуска для версии проекта, содержащей миграцию базы данных.
Скотт обновляет исходный код метки выпуска на сервере в рабочей среде.
Скотт отправляет все инкрементные миграции баз данных в базу данных производственной среды.
Yii предоставляет полный набор инструментов командной строки для миграции, с помощью которых вы можете:
Создайте новую миграцию (./Yii миграция/создать описание миграции);
Отправить миграцию;
Восстановление миграции;
Возобновление миграции;
История и состояние миграции реальности.
Всеми этими инструментами можно управлять с помощью команды Yii migrate. Примечание. Миграция работает не только с таблицами базы данных, она также корректирует существующие данные в соответствии с новыми формами, создает слои RBAC или очищает кэши.
Создание миграции
Используйте следующие команды для создания новой миграции:
yii migrate/create
Функция обязательного имени параметра состоит в том, чтобы дать краткое описание новой миграции.
Например, если миграция используется для создания формы с именем новости, вы можете использовать имя create_news_table и выполнить следующую команду:
yii migrate/create create_news_table
Примечание. Поскольку параметр name используется для создания части имени перенесенного класса, он должен содержать только буквы, цифры и символы подчеркивания.
Приведенная выше команда создаст новый файл класса PHP с именем m150101_185401_create_news_table. php в каталоге @app/миграции.
Этот файл содержит следующий код для объявления класса миграции m150101_185401_create_new_table с помощью структуры кода:
Каждая миграция базы данных определяется как класс PHP, унаследованный от миграции базы данных yii. Имена классов автоматически генерируются в формате m<Имя>, где
относится к времени UTC, когда была создана команда миграции.
<Имя> имеет то же значение параметра name, что и при выполнении команды.
В классе миграции вы должны написать код, который изменяет структуру базы данных в методе up (). Вам также может потребоваться написать код в методе down (), чтобы восстановить изменения, внесенные методом up ().
При обновлении базы данных путем миграции будет вызван метод up (), и наоборот, будет вызван метод down (). В следующем коде показано, как создать новую стабильную среду путем переноса классов:
use yii\db\Schema;
use yii\db\Migration;
class m150101_185401_create_news_table extends \yii\db\Migration{
public function up() {
$this->createTable('news', [ 'id' => Schema::TYPE_PK, 'title' => Schema::TYPE_STRING . ' NOT NULL', 'content' => Schema::TYPE_TEXT, ]);
}
public function down() {
$this->dropTable('news');
}
}Примечание. Не все миграции можно восстановить.
Например, если метод up () удаляет строку данных из таблицы, восстановить данные методом down () будет невозможно. Иногда вам может быть просто лень выполнять метод down (), потому что он не является таким универсальным при восстановлении миграции базы данных. В этом случае вы должны вернуть значение false в методе down (), чтобы указать, что миграция не подлежит восстановлению.
Отправить миграцию
Чтобы обновить базу данных до последней структуры, необходимо отправить все новые миграции, используя следующие команды:
yii migrate
Эта команда перечисляет все незафиксированные миграции до сих пор.
Если вы решите, что вам нужно отправить эти миграции, он будет запускать методы () или safeUp () в каждом новом классе миграции один за другим в порядке временных меток в имени класса. Если какая-либо из этих отправок миграции завершается неудачно, команда завершает и останавливает оставшиеся миграции, которые еще не были выполнены.
Для каждой успешно совершенной миграции эта команда вставляет запись в таблицу базы данных под названием миграция, содержащую успешную отправку миграции приложением, которая поможет инструменту миграции определить, какие миграции были отправлены, а какие еще не были отправлены.
Совет: Средство миграции автоматически создаст таблицу миграции в базе данных, указанной в параметре команды yii console controllers MigrateController:: DB. По умолчанию он задается компонентом приложения БД.
Иногда вам может потребоваться отправить только одну или несколько миграций, и вы можете использовать эту команду, чтобы указать количество выполняемых элементов вместо всех доступных миграций. Например, следующая команда попытается отправить первые три доступные миграции:
yii migrate 3
Вы также можете указать конкретную миграцию, используя команду migrate/to в следующем формате, чтобы указать, какую миграцию должна отправлять база данных:
Yii migrate/to 150101_185401# using timestamp to specify the migration using timestamps to specify the migration Yii migrate / to "2015-01-01 18:54:01" using a string that can be parsed by strtotime () using a string that can be parsed by strtotime () using a string that can be parsed by strtotime () Yii migrate/to m150101_185401_create_news_table# using full name Yii migrate / to 1392853618 using UNIX timestamp using UNIX timestamp
Если до указанной миграции, подлежащей отправке, имеются незафиксированные миграции, эти незафиксированные миграции будут отправлены до выполнения указанной миграции.
Если миграция, указанная для отправки, была отправлена ранее, то эти последующие миграции будут восстановлены.
Сокращение миграции
Вы можете использовать следующую команду для восстановления переноса одной или нескольких отправленных данных:
Yii migrate/down revert the most recently applied migration to restore the last submitted migration Yii migrate/down 3# revert the most 3 recent applied migrations to restore the last three submitted migrations
Примечание: Не все миграции могут быть восстановлены. Попытки восстановить такие миграции могут привести к ошибкам или даже к завершению всех процессов восстановления.
Повторите миграцию
Повторная миграция означает сначала восстановление указанной миграции, а затем ее повторную фиксацию. Следующим образом:
Yii migrate/redo# redo the last applied migration to redo the last submitted migration Yii migrate/redo 3# redo the last 3 applied migrations to redo the last three submitted migrations
Примечание.Если миграция не может быть восстановлена, вы не сможете ее повторить.
Перечислите миграции
Вы можете использовать следующие команды для перечисления отправленных или еще не отправленных миграций:
Yii migrate/history# Displays the last 10 submitted migrations Yii migrate / history 5 # shows the last five submitted migrations Yii migrate / history all # shows all submitted migrations Yii migrate / new # shows the top 10 uncommitted migrations Yii migrate / new 5 # shows the first five uncommitted migrations Yii migrate / new all # shows all migrations that have not yet been submitted
Изменение истории миграции
Иногда вам может потребоваться просто отметить, что ваша база данных была обновлена до определенной миграции, вместо того, чтобы фактически фиксировать или восстанавливать миграцию. Это часто происходит, когда вы вручную изменяете определенное состояние базы данных, не требуя повторной отправки соответствующей миграции. Затем вы можете использовать следующие команды для достижения своей цели:
Yii migrate/mark 150101_185401# uses a timestamp to specify the migration Yii migrate/mark "2015-01-01 18:54:01"# uses a string that can be parsed by strtotime () Yii migrate/mark m150101_185401_create_news_table# using full name Yii migrate/mark 1392853618# Use UNIX timestamp
Эта команда добавит или удалит строки данных в таблице миграции, чтобы указать, что база данных была отправлена в указанную миграцию.
Во время выполнения этой команды миграция не будет зафиксирована или восстановлена.
Команда глобальной конфигурации
Раздражает повторять некоторые из тех же параметров каждый раз, когда вы запускаете команду миграции. На этом этапе вы можете выбрать глобальную настройку приложения, раз и навсегда:
return [
'controllerMap' => [
'migrate' => [
'class' => 'yii\console\controllers\MigrateController',
'migrationTable' => 'backend_migration',
],
],
];Как показано выше, таблица backend_migration будет использоваться для записи истории миграции при каждом запуске команды миграции. Вам больше не нужно указывать эту таблицу истории с помощью параметров командной строки таблицы миграции.
Миграция нескольких баз данных
По умолчанию миграция будет отправлена в ту же базу данных, определенную компонентом приложения БД. Если вам нужно отправить данные в разные базы данных, вы можете указать параметры командной строки БД следующим образом.
yii migrate --db=db2
Приведенная выше команда отправит миграцию в базу данных DB2.
Иногда вам нужно отправить некоторые из них для переноса в одну базу данных, а другие-в другую базу данных. Для этого необходимо указать идентификатор компонента базы данных, который необходимо использовать при реализации класса миграции, следующим образом:
use yii\db\Schema;
use yii\db\Migration;
class m150101_185401_create_news_table extends Migration{
public function init()
{
$this->db = 'db2';
parent::init();
}
}Даже если вы укажете другую базу данных с помощью параметра командной строки DB, описанная выше миграция будет отправлена в db2. Следует отметить, что перенесенная информация об истории все равно будет записана в базе данных, указанной в параметре командной строки DB в это время.
Если при нескольких миграциях используется одна и та же база данных, рекомендуется создать перенесенный базовый класс, содержащий код init (), описанный выше. Затем каждый класс миграции наследует базовый класс.
Совет: В дополнение к настройке параметра yii db Migration:: DB, вы также можете управлять различными базами данных, создавая новые подключения к базе данных в классе миграции. Эти соединения затем используются для управления различными базами данных с помощью методов DAO.
Другая стратегия, позволяющая перенести несколько баз данных, заключается в том, чтобы сохранить миграцию в разных каталогах, а затем вы можете перенести разные базы данных отдельно, выполнив следующие команды:
yii migrate [email protected]/migrations/db1 --db=db1 yii migrate [email protected]/migrations/db2 --db=db2 ...
Первая команда отправляет миграцию в каталог @app/миграции/db1 в базу данных db1, вторая команда отправляет миграцию в базу данных @app/миграции/db2 и так далее.