AdSense - шапка

вторник, 27 марта 2012 г.

PHP. Механизм миграций в различных фреймворках.

Понятие миграции

Миграции - это механизм, позволяющий инкапсулировать в себе изменения базы данных.
Чем удобны миграции:
  1. Миграции можно применять и откатывать.
  2. С помощью этого механизма базу данных проекта можно очень быстро привести в актуальное состояние на любом компьютере. Обычно, можно просто выполнить одну команду для обновления базы. Это удобно как при командной разработке, так и при обновлении сайта на сервере.
  3. Не надо хранить множество sql файлов для отслеживания изменений БД и потом разбираться, какой именно sql файл надо применить. Механизмы миграций берут эту задачу на себя.
Основные операции, которые должна реализовывать каждая миграция:
  1. up - накатывает изменения текущей миграции.
  2. 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 поддерживает множество дополнительных полезных команд:
  1. Генерация миграций по существующей базе данных
  2. Генерация миграций по существующим классам-моделям

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-фреймворки поддерживают миграции, поэтому всем желаю удачной работы с миграциями.

Комментариев нет:

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