Понятие миграции
Миграции - это механизм, позволяющий инкапсулировать в себе изменения базы данных.Чем удобны миграции:
- Миграции можно применять и откатывать.
- С помощью этого механизма базу данных проекта можно очень быстро привести в актуальное состояние на любом компьютере. Обычно, можно просто выполнить одну команду для обновления базы. Это удобно как при командной разработке, так и при обновлении сайта на сервере.
- Не надо хранить множество sql файлов для отслеживания изменений БД и потом разбираться, какой именно sql файл надо применить. Механизмы миграций берут эту задачу на себя.
Основные операции, которые должна реализовывать каждая миграция:
- up - накатывает изменения текущей миграции.
- down - откатывает изменения миграции.
Миграции в различных фреймворках
Yii
Структура миграции следующая:
class m101129_185401_create_news_table extends CDbMigration
{
public function up()
{
$this->createTable('tbl_news', array(
'id' => 'pk',
'title' => 'string NOT NULL',
'content' => 'text',
));
}
public function down()
{
$this->dropTable('tbl_news');
}
}
Применить миграции к базе данных можно с помощью команды:
yiic migrate
Также yii позволяет откатывать миграции миграции, просматривать историю, создавать каркас миграции и т.д.
Symfony 1.4.
Doctrine
Структура миграции:
class AddBlogPostExcerptColumn extends Doctrine_Migration
{
public function up()
{
}
public function down()
{
}
}
Doctrine поддерживает множество дополнительных полезных команд:
- Генерация миграций по существующей базе данных
- Генерация миграций по существующим классам-моделям
Propel
Для Propel'а существует специальный плагин - http://www.symfony-project.org/plugins/sfPropelMigrationsLightPlugin
По функционалу он не очень богат, позволяет выполнять существующие миграции и всё.
Функционал самой миграции очень скуден - реализует только несколько команд работы с БД: выполнение целого SQL запроса, добавление столбца в таблицу и т.д.
Symfony 2. Doctrine
Миграции аналогичны с Doctrine Symfony 1.4 как по структуре, так и по функционалу.
Zend
class AddSecondEmailAddressColumn extends Zend_Db_Schema_Change
{
function up()
{
$table = $this->table('users');
$table->addColumn('email_address2', 'string', array('length'=>50));
$table->save();
}
function down()
{
$table = $this->table('users');
$table->removeColumn('email_address2');
$table->save();
}
}
Миграции в Zend немного более громоздки. Но функционал вполне достаточный для работы с механизмом миграций.
В итоге
Механизм миграций очень удобен как во врем разработки веб-приложения, так и при обновлении приложения на production сервере.
Почти все современные php-фреймворки поддерживают миграции, поэтому всем желаю удачной работы с миграциями.
Комментариев нет:
Отправить комментарий