کلاس مایگریشن

مجتبی پاکزاد کدایگنایتر 3.1.9 در حال تکمیل رایگان

مایگریشن‌ها، روشی مناسب برای اصلاح دیتابیس، به سبکی ساختار یافته و سازمان یافته هستند. می‌توانید بخش‌های مختلف SQL را به صورت دستی ویرایش کنید، اما مسئولیت اینکه به سایر دولوپرها بگویید که آن بخش را به همان شکل ویرایش کنند، با شما خواهد بود. همچنین، باید پیگیری کنید که چه تغییراتی نیاز است تا در زمان دپلوی بعدی بر روی سرور اجرا شود.

تیبل migration پیگیری می‌کند که چه مایگریشن‌هایی قبلا اجرا شده‌اند، بنابراین، تمام کاری که باید انجام دهد، این است که فایل‌های اپلیکیشن خود را آپدیت کنید و $this->migration->current() را فراخوانی کنید تا متوجه شوید که کدام مایگریشن‌ها باید اجرا شوند. ورژن فعلی در فایل application/config/migration.php قرار دارد.

نام فایل‌های مایگریشن

هر مایگریشن بسته به متدی که آن را اجرا میکند، با ترتیب عددی به عقب یا جلو اجرا می‌شود.

  • متوالی: مایگریشن‌ها به ترتیب شماره‌گذاری می‌شوند، که این شماره‌ها از 001 شروع می‌شوند. هر عدد باید دارای سه رقم باشد و در دنباله نباید هیچ فاصله‌ای باشد. (این روش نامگذاری، قبل از کدایگنایتر 3.0 استفاده می‌گردید.)
  • تایم‌استمپ (یا برچسب زمانی): مایگریشن‌ها بر اساس تایم‌استمپ زمان ساخت‌شان در فرمت YYYYMMDDHHIISS (برای مثال 20121031100537) شماره‌گذاری می‌شوند. هنگامی که به صورت تیمی روی یک پروژه کار می‌کنید، این الگو از تداخل نام‌ها جلوگیری می‌کند و الگوی ترجیح داده شده در کدایگنایتر 3.0 و ورژن‌های بعدی آن است.)

با تغییر مقدار $config['migration_type'] در فایل application/config/migration.php، می‌توانید سبک مورد نظر خود را انتخاب کنید.

صرفنظر از اینکه چه سبکی را برای استفاده انتخاب می‌کنید، پیشوند فایل‌های مایگریشن شما، با یک اندراسکور و سپس یک نام توصیفی برای مایگریشن دنبال می‌شود. برای مثال:

  • 001_add_blog.php شماره گذاری متوالی
  • 20121031100537_add_blog.php شماره‌گذاری بر اساس تایم‌استمپ

ساخت یک مایگریشن

این اولین مایگریشن یک سایت جدید که یک وبلاگ دارد، خواهد بود. تمام مایگریشن‌ها در دایرکتوری application/migrations/ قرار می‌گیرند و نام‌هایی مانند 20121031100537_add_blog.php خواهند داشت.

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Migration_Add_blog extends CI_Migration {

        public function up()
        {
                $this->dbforge->add_field(array(
                        'blog_id' => array(
                                'type' => 'INT',
                                'constraint' => 5,
                                'unsigned' => TRUE,
                                'auto_increment' => TRUE
                        ),
                        'blog_title' => array(
                                'type' => 'VARCHAR',
                                'constraint' => '100',
                        ),
                        'blog_description' => array(
                                'type' => 'TEXT',
                                'null' => TRUE,
                        ),
                ));
                $this->dbforge->add_key('blog_id', TRUE);
                $this->dbforge->create_table('blog');
        }

        public function down()
        {
                $this->dbforge->drop_table('blog');
        }
}

سپس $config['migration_version'] = 20121031100537; را در فایل application/config/migration.php مقداردهی کنید.

مثال نحوه استفاده

در این مثال، کدی ساده در application/controllers/Migrate.php قرار داده شده است تا اسکیما را آپدیت کنیم:

<?php

class Migrate extends CI_Controller
{

        public function index()
        {
                $this->load->library('migration');

                if ($this->migration->current() === FALSE)
                {
                        show_error($this->migration->error_string());
                }
        }

}

تنظیمات سلیقه‌ای مایگریشن

جدول زیر حاوی تمامی آپشن‌های کانفیگ برای مایگریشن‌ها است.

تنظیم پیش‌فرض آپشن‌ها توصیف
migration_enabled FALSE TRUE / FALSE فعال یا غیرفعال‌سازی مایگریشن‌ها
migration_path APPPATH.’migrations/’ ندارد مسیر پوشه مایگریشن شما
migration_version 0 ندارد ورژن جاری مایگریشن که دیتابیس شما از آن استفاده می‌کند
migration_table migrations ندارد نام تیبل برای ذخیره‌سازی شماره ورژن اسکیمای جدول
migration_auto_latest FALSE TRUE / FALSE فعال یا غیرفعال‌سازی اجرای اتوماتیک مایگریشن‌ها
migration_type ‘timestamp’ ‘timestamp’ / ‘sequential’ نوع مشخص کننده‌ی عددی که برای نامگذاری نام فایل‌های مایگریشن استفاده می‌شود

رفرنس کلاس

کلاس CI_Migration
current()
مقدار بازگشتی اگر مایگریشنی یافت نشود، TRUE برمی‌گرداند، در صورت موفقیت ورژن فعلی را به صورت استرینگ برمی‌گرداند و در صورت شکست FALSE برمی‌گرداند.
نوع مقدار بازگشتی mixed (بیش ازیک نوع)

دستور Migrates up به ورژن فعلی اجرا می‌شود (بر اساس آنچه در $config['migration_version'] در application/config/migration.php ست شده باشد).

error_string()
مقدار بازگشتی پیام‌های خطا
نوع مقدار بازگشتی استرینگ

این فانکشن، خطاهای اتفاق افتاده در حین اجرای یک مایگریشن را به شکل استرینگ برمی‌گرداند.

find_migrations()
مقدار بازگشتی آرایه‌ای از فایل‌های مایگریشن
نوع مقدار بازگشتی آرایه

آرایه‌ای از نام فایل‌های مایگریشن را برمی‌گرداند که در پراپرتی migration_path یافته است.

latest()
مقدار بازگشتی در صورت موفقیت استرینگ ورژن جاری و در صورت شکست FALSE برمی‌گرداند.
نوع مقدار بازگشتی mixed (بیش از یک نوع)

نحوه کار این متد، خیلی شبیه به متد current() است، اما به جای اینکه دنبال $config['migration_version']، کلاس Migration آخرین مایگریشن یافت شده در سیستم فایل را استفاده می‌کند.

version($target_version)
پارامترها
  • $target_version نوع mixed - ورژن مایگریشن برای پردازش
مقدار بازگشتی اگر مایگریشنی یافت نشود، TRUE برمی‌گرداند، در صورت موفقیت ورژن فعلی را به صورت استرینگ برمی‌گرداند و در صورت شکست FALSE برمی‌گرداند.
نوع مقدار بازگشتی mixed (بیش ازیک نوع)

متد Version می‌تواند برای بازگرداندن (roll back) تغییرات یا پریدن به ورژن مشخصی از مایگریشن استفاده شود. این متد مانند متد current() کار می‌کند، اما $config['migration_version'] را نادیده می‌گیرد.

$this->migration->version(5);
منبع
Migrations Class