Migration Pada CodeIgniter
Menggunakan Fitur Migrations (Migrasi) pada CodeIgniter
Salah satu fitur baru yang
dikenalkan pada CodeIgniter 2.1.0 adalah Migrations (Bahasa Indonesia :
Migrasi). Fitur ini masuk dalam kategori librari, namum perlakuannya sedikit
berbeda dengan librari pada umumnya. Fungsi utamanya untuk manajemen data atau
tabel yang ada pada basisdata. Beberapa metode di dalamnya akan dipanggil dan
dijalankan dalam kasus-kasus tertentu berdasarkan versi yang didefinisikan.
Librari ini sebenarnya sudah ada
sebelum rilis CodeIgniter versi terbaru. Aslinya dibuat oleh Phil Sturgeon. Dia juga pernah menjelaskan fungsi dan cara penggunaan
librari tersebut. Namun, entah kenapa saya belum ada niatan untuk mencobanya
pada waktu itu. Disamping karena tidak paham betul fungsinya, tidak ada kasus
juga yang membuat saya membutuhkan librari tersebut. Sturgeon mungkin pernah
mengajukan proposal agar dimasukkan kedalam CodeIgniter, dan bagusnya proposal
tersebut diterima oleh tim pengembang yang lain. Karena sekarang merupakan
bagian dari CodeIgniter, fitur ini layak untuk kita coba. Barangkali suatu saat
akan berguna sekali
Kita ambil contoh begini. Dalam
aplikasi yang kita buat sebelumnya, terdapat sebuah tabel user dengan beberapa
kolom, namun pada tabel tersebut tidak tercantum kolom dengan nama “real_name”
misalnya, yang mana kolom ini menyimpan nama asli user. Pada paket aplikasi
berikutnya yang kita buat, dalam skrip tersebut terdapat beberapa langkah yang
membutuhkan kolom real_name untuk dapat diproses pada PHP. Dan, orang/klien
yang menggunakan aplikasi kita sebelumnya diwajibkan untuk memperbaharui
aplikasinya. Lantas, bagaimana memperbaharui tabel user pada basisdata? Apakah
klien kita harus mengubahnya secara manual? Atau kita langsung yang mengubahnya
secara manual? Bagaimana kalau klien yang ingin memperbaharuinya tidak sedikit?
Nah, inilah saat tepat dimana migrasi dipekerjakan.
Secara kasar, fungsi migrasi yang kita
buat nantinya akan menentukan penambahan kolom real_name. Tergantung dari versi
yang digunakan klien tersebut, jika versi migrasinya lebih tinggi, maka akan
melakukan upgrade, kalau versinya lebih rendah maka akan melakukan hal
sebaliknya.
Mulai dari bagian ini, saya akan
membahas sisi teknis migrasi dengan membeberkan beberapa contoh skrip beserta
penjelasannya. Hal pertama yang terpenting dalam migrasi adalah berkas config
yang disediakan, terletak pada direktori application/config dengan nama
migration. Ada tiga item config yang harus kalian pahami.
$config['migration_enabled']
= FALSE;
Nilai
bawaan adalah FALSE. Ubah nilainya menjadi TRUE, untuk mengaktifkan migrasi.
1
|
$config['migration_version']
= 00;
|
Menjelaskan
versi migrasi saat ini yang digunakan. Karena merupakan pertama kalinya
menggunakan versi migrasi, kita bisa mengisi nilainya menjadi 1.
1
|
$config['migration_path']
= APPPATH . 'migrations/';
|
Menentukan letak bawaan berkas migrasi yang kita buat. Jika
ingin tetap menggunakan nilai bawaan, kalian harus membuat direktori dengan
nama migrations dalam direktori application. Berikut ini contoh skrip yang
merupakan inti dari migrasi berupa penambahan kolom real_name untuk versi 1.
defined('BASEPATH') or exit('No direct script access.');
/**
* @author Yugo
*/
class Migration_Add_real_name_column extends CI_Migration {
/**
* Upgrade
*/
public function up() {
// dengan dbforge
$this->dbforge->add_column('user', array(
'real_name' => array(
'type' => 'varchar',
'constraint' => 30,
'null' => false,
'default' => ''
)
));
// atau bisa juga dengan query
$query = 'ALTER TABLE `user` ADD `real_name` VARCHAR( 30 ) NOT NULL';
$this->db->query($query);
}
/**
* Downgrade
*/
public function down() {
// dengan dbforge
$this->dbforge->drop_column('user', 'real_name');
// atau dengan query
$query = 'ALTER TABLE `user` DROP `real_name`';
$this->db->query($query);
}
}
/* APPPATH/migrations/001_Add_real_name_column.php */