Menggunakan fungsi “Migration” pada Yii

migratio

Fitur database migration adalah sebuah fitur yang menurut saya sangat bermanfaat, kita dapat menggenerate tabel pada database tanpa harus membuka tools database nya, misalnya mysql workbench, navicat atau phpmyadmin. Fitur ini dulu saya temui di framework rails (pertama belajar framework). Ternyata di Yii dan Laravel juga memiliki fitur yang mirip.

Pada artikel kali ini saya mencoba mempraktekkan bagaimana membuat tabel dengan fitur database migration.

Yang perlu disiapkan adalah databasenya dan aplikasi yii-nya, saya asumsikan kita sudah membuat database bernama “yiiPractice” (bisa Anda sesuaikan sendiri) dan juga sudah membuat aplikasi yii dengan nama yiiPractice juga. Dikarenakan fitur migration ini menggunakan fungsi console layaknya yiic, maka kita sesuaikan konfigurasinya pada file “protected/config/console.php”. Buka file tersebut dan karena saya menggunakan database MySQL maka konfigurasi untuk sqlite saya berikan tanda comment dan saya menghilangkan komentar untuk bagian konfigurasi mySQL. Sesuaikan dengan database masing-masing

'components'=>array(
 // 'db'=>array(
 // 'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',
 // ),
 // uncomment the following to use a MySQL database

 'db'=>array(
 'connectionString' => 'mysql:host=localhost;dbname=yiiPractice',
 'emulatePrepare' => true,
 'username' => 'root', //sesuaikan
 'password' => 'root', //sesuaikan
 'charset' => 'utf8',
 ),

 ),

OK, yii migration siap digunakan. Buka konsole / terminal. Masuk ke folder yiiPractice/protected kemudian lakukan perintah migrate untuk membuat tbl_migration yang digunakan sebagai tempat menyimpan log migration kita. Sekaligus mengecek apakah konfigurasi kita sudah sesuai atau belum. Perintahnya sebagai berikut :

./yiic migrate

Selanjutnya kita akan mencoba membuat table dengan nama tbl_user yang memiliki field name, email, address. Tabel sederhana saja, supaya mudah dipahami. Langkahnya adalah membuat perintah migration untuk tabel tersebut. Perintahnya

./yiic migrate create create_user_table

Apabila sukses maka muncul hasilnya seperti berikut

Yii Migration Tool v1.0 (based on Yii v1.1.13)

Create new migration 'public_html/yiiPractice/protected/migrations/m130111_002022_create_user_table.php'? (yes|no) [no]:yes
New migration created successfully.

Hasil file migration terletak pada direktori protected/migrations, buka file m130111_002022_create_user_table.php (deretan angka pada nama file mungkin berbeda). Terdapat 4 buah method yaitu up, down, safeUp dan safeDown. Untuk menggenerate table, method yang kita jalankan adalah up, apabila akan mengembalikan ke langkah selanjutnya kita gunakan method down. Sedangkan jika akan menggunakan fitur Transaction dalam menggenerate table,misalnya memiliki relasi tabel dan lain-lain, yang dijalankan adalah method safeUp dan safeDown.

Kita ubah method up sesuai dengan bentuk table yang kita rancang. Sehingga menjadi seperti berikut :

public function up()
 {
 $this->createTable('tbl_user',array(
 'id'=>'pk',
 'name'=>'string NOT NULL',
 'email'=>'string NOT NULL',
 'address'=>'text NOT NULL',
 ),'ENGINE=InnoDB'
 );
 }

public function down()
 {
 $this->dropTable('tbl_user');
 }

Langkah terakhir adalah proses generatenya, dengan konsole/terminal masuk pada direktori yiiPractice/protected/ lakukan perintah

./yiic migrate

ketik yes jika ada perintah untuk memilih yes atau no, kemudian jika tidak ada error maka akan muncul notifikasi

./yiic migrate

Yii Migration Tool v1.0 (based on Yii v1.1.13)

Total 1 new migration to be applied:
 m130111_002022_create_user_table

Apply the above migration? (yes|no) [no]:yes
*** applying m130111_002022_create_user_table
 > create table tbl_user ... done (time: 0.133s)
*** applied m130111_002022_create_user_table (time: 0.258s)

Migrated up successfully.

Silahkan diperiksa pada phpmyadmin atau tools mysql lainnya, akan tercipta table tbl_user sesuai yang kita generate sebelumnya. Jika kita akan menghapus table tersebut, kita lakukan perintah ./yiic migrate down. Seperti pada contoh berikut maka table tbl_user akan terhapus

./yiic migrate down

Yii Migration Tool v1.0 (based on Yii v1.1.13)

Total 1 migration to be reverted:
 m130111_002022_create_user_table

Revert the above migration? (yes|no) [no]:yes
*** reverting m130111_002022_create_user_table
 > drop table tbl_user ... done (time: 0.052s)
*** reverted m130111_002022_create_user_table (time: 0.164s)

Migrated down successfully.

Selanjutnya adalah menggunakan Gii untuk menggenerate Model dan CRUD-nya. Semoga bermanfaat