Code Factory | Selama proses pengembangan aplikasi database, struktur database yang digunakan juga ikut berubah dan berkembang seperti halnya kode sumber (source code) aplikasi kita. Misalnya, membuat tabel baru, menambahkan kolom baru, menambahkan indeks untuk meningkatkan kinerja query, dan sebagainya. Karena perubahan struktur database sering membutuhkan beberapa perubahan kode sumber, Yii menyediakan fitur migrasi database yang memungkinkan Anda untuk melacak perubahan database, melakukan upgrade struktur database, atau downgrade struktur database jika diperlukan. Referensi lengkap tentang migrasi database di Yii bisa dilihat di laman ini.

Code Factory Sistem Inventory atau Aplikasi Persediaan Barang adalah salah satu aplikasi yang umum dan cukup menantang terutama bagi para programmer pemula yang sedang mengasah skill programming-nya. Artikel ini merupakan lanjutan dari artikel pertama tentang Cara Instalasi Yii Framework. Aplikasi yang akan kita bangun sederhana saja sehingga cukup mudah dipahami para programmer pemula.

Migrasi Database (Database Migration)

Selama proses pengembangan aplikasi database, struktur database yang digunakan juga ikut berubah dan berkembang seperti halnya kode sumber (source code) aplikasi kita. Misalnya, membuat tabel baru, menambahkan kolom baru, menambahkan indeks untuk meningkatkan kinerja query, dan sebagainya. Karena perubahan struktur database sering membutuhkan beberapa perubahan kode sumber, Yii menyediakan fitur migrasi database yang memungkinkan Anda untuk melacak perubahan database, melakukan upgrade struktur database, atau downgrade struktur database jika diperlukan. Referensi lengkap tentang migrasi database di Yii bisa dilihat di laman ini.

Untuk memulai menggunakan fitur migration di Yii, pastikan kita sudah membuat forlder migrations di dalam folder framework yii kita. Sesuai dengan desain database yang sudah kita buat sebelumnya, maka kita perlu membuat migrasi untuk 4 (empat) buat tabel, yaitu items, transaction_types, transactions, dan transaction_details.

Jalankan perintah berikut untuk membuat migrasi table items.

yii migrate/create create_table_items

Yii kemudian akan menanyakan apakah kita benar akan membuat migrasi, jawablah dengan yes.

Aplikasi Persediaan Barang (Sistem Inventory) Menggunakan Yii2 Yii Migration

Setelah itu, buka folder migrations maka kamu akan melihat sebuah file yang di-generate oleh Yii. Bukalah dan isikan kode untuk membuat tabel items, seperti kode sumber di bawah ini.

public function up()
{
    $this->createTable('items', [
        'id' => Schema::TYPE_PK,
        'code' => Schema::TYPE_STRING . ' NOT NULL',
        'name' => Schema::TYPE_STRING . ' NOT NULL',
        'quantity' => Schema::TYPE_INTEGER . ' DEFAULT 0',
        'remarks' => Schema::TYPE_STRING,
    ]);
}
public function down()
{
    $this->dropTable('items');
}

Berikutnya kita buatkan migrasi untuk tabel transaction_types dengan menjalankan perintah ini

yii migrate/create create_table_transaction_types

Aplikasi Persediaan Barang (Sistem Inventory) Menggunakan Yii2 Yii Migration

Kemudian tambahkan kode berikut ini untuk membuat tabel transaction_types. Karena kita menggunakan tabel transaction_types ini untuk membedakan transaksi barang masuk dan transaksi barang keluar, maka kita juga harus menambahkan beberapa record ke tabel ini. 

public function up()
{
    $this->createTable('transaction_types', [
        'id' => Schema::TYPE_PK,
        'code' => Schema::TYPE_STRING . ' NOT NULL',
        'name' => Schema::TYPE_STRING . ' NOT NULL',
    ]);
    // default data
    $this->insert('transaction_types', [
        'id' => 1,
        'code' => 'IN',
        'name' => 'Barang Masuk',
    ]);
    $this->insert('transaction_types', [
        'id' => 2,
        'code' => 'OUT',
        'name' => 'Barang Keluar',
    ]);
}
public function down()
{
    $this->dropTable('transaction_types');
}

Berikutnya kita buatkan migrasi untuk tabel transactions dengan menjalankan perintah ini

yii migrate/create create_table_transactions

Aplikasi Persediaan Barang (Sistem Inventory) Menggunakan Yii2 Yii Migration

Kemudian tambahkan kode berikut ini. Karena tabel transactions ini memiliki relasi dengan tabel transaction_types, maka kita juga perlu menambahkan kode untuk men-generate relasi foreign key seperti tampak pada kode di bawah ini.

public function up()
{
    $this->createTable('transactions', [
        'id' => Schema::TYPE_PK,
        'trans_code' => Schema::TYPE_STRING . ' NOT NULL',
        'trans_date' => Schema::TYPE_DATE . ' NOT NULL DEFAULT 0',
        'type_id' => Schema::TYPE_INTEGER . ' NOT NULL',
        'remarks' => Schema::TYPE_STRING,
    ]);
    // foreign keys
    $this->addForeignKey(
        'fk_transactions_types', 
        'transactions', 'type_id', 
        'transaction_types', 'id', 
        'restrict', 'cascade');
}
public function down()
{
    $this->dropTable('transactions');
}

Berikutnya kita buatkan migrasi untuk tabel transaction_details dengan menjalankan perintah ini

yii migrate/create create_table_transaction_details

Aplikasi Persediaan Barang (Sistem Inventory) Menggunakan Yii2 Yii Migration

Kemudian tambahkan kode berikut ini. Karena kita transaction_details ini memiliki relasi dengan tabel transactions dan tabel items maka kita juga perlu menambahkan kode untuk men-generate relasi foreign key seperti tampak pada kode di bawah ini.

public function up()
{
    $this->createTable('transaction_details', [
        'id' => Schema::TYPE_PK,
        'trans_id' => Schema::TYPE_INTEGER . ' NOT NULL',
        'item_id' => Schema::TYPE_INTEGER,
        'quantity' => Schema::TYPE_DECIMAL . '(15,2) NOT NULL DEFAULT 0',
        'remarks' => Schema::TYPE_STRING,
    ]);
    // foreign keys
    $this->addForeignKey(
        'fk_transaction_details_transactions', 
        'transaction_details', 'trans_id', 
        'transactions', 'id', 
        'restrict', 'cascade');
    $this->addForeignKey(
        'fk_transaction_details_items', 
        'transaction_details', 'item_id', 
        'items', 'id', 
        'restrict', 'cascade');
}
public function down()
{
    $this->dropTable('transaction_details');
}

Jangan lupa ditambahkan baris berikut ini di setaip file migration, karena kita menggunakan class Schema untuk mendefinisikan tipe data field. 

use yii\db\Schema;

Setelah semua migrasi kita siapkan, maka yang perlu kita lakukan adalah mengeksekusi migrasi tersebut. Caranya sangat mudah cukup dengan menjalankan perintah 

yii migrate

Contoh hasil eksekusinya tampak pada screenshot di bawah ini.

Kode sumber (source code) bisa dilihat di laman ini.

Generate Models Menggunakan Gii

Yii menyediakan extension Gii untuk memudahkan kita men-generate code untuk models, forms, CRUD, modules dan sebagainya. Gii bisa diakses melalui URL

http://localhost/path/to/index.php?r=gii

Atau jika kamu sudah menggunakan fitur pretty URL, maka Gii dapat diakses di

http://localhost/path/to/index.php/gii

Berikutnya silakan buka Model Generator agar kita bisa men-generate models untuk database kita. Seperti tampak pada screenshot di bawah ini.

[collapsed title=Generate Models]Aplikasi Persediaan Barang (Sistem Inventory) Menggunakan Yii2 Gii Models Generator[/collapsed] 

Isikan Table Name dengan nama table yang ingin kita generate code models-nya dan biarkan Model Class di-generate secara otomatis oleh Gii. Biarkan semua opsi lainnya sesuai default-nya saja. Perhatikan field namespace terisi dengan app\models maka nanti Fully Qualified Class Name dari models yang kita buat menjadi app\models\ItemsFully Qualified Class Name ini perlu kita ingat karena akan berguna pada saat kita men-generate form CRUD. 

Selanjutnya tekan tombol [Preview] agar Gii membuat preview hasil code generation-nya, seperti tampak pada screenshot di bawah ini.

[collapsed title=Generate Models]Aplikasi Persediaan Barang (Sistem Inventory) Menggunakan Yii2 Gii models generator[/collapsed] 

Karena ini sifatnya hanya preview, tujuannya adalah agar Gii tidak sampai menimpa file yang mungkin sudah kita ubah sebelumnya. Jika action yang tampil adalah create maka langsung saja tekan tombol [Generate] agar Gii benar-benar men-generate file yang kita inginkan.

[collapsed title=Generate Models]Aplikasi Persediaan Barang (Sistem Inventory) Menggunakan Yii2 Gii models generator[/collapsed] 

Lakukanlah hal yang sama untuk semua table di aplikasi ini, sehingga semua table yang ada di database tersedia file model-nya

Selamat mencoba…..!

Pojok Programmer BiruniLabs Code Factory Indonesia

Leave a Reply

Your email address will not be published. Required fields are marked *