<p><a href="
http://pojokprogrammer.net/tags/code-factory" style="line-height: 20.8px;" target="_blank"><strong><span style="color:rgb(0, 0, 205)">Code </span><span style="color:rgb(255, 0, 0)">Factory</span></strong></a><span style="color:rgb(255, 0, 0)"> </span>| <strong>Sistem Inventory </strong>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 <a href="
http://pojokprogrammer.net/content/aplikasi-persediaan-barang-sistem-in…"><strong>Cara Instalasi Yii Framework</strong></a>. Aplikasi yang akan kita bangun <strong>sederhana </strong>saja sehingga cukup mudah dipahami para programmer pemula.</p>
<h2>Migrasi Database (<em>Database Migration</em>)</h2>
<p>Selama proses pengembangan aplikasi database, struktur database yang digunakan juga ikut berubah dan berkembang seperti halnya kode sumber (<em>source code</em>) 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 <em>upgrade </em>struktur database, atau <em>downgrade </em>struktur database jika diperlukan. Referensi lengkap tentang migrasi database di Yii bisa dilihat <a href="
http://www.yiiframework.com/doc-2.0/guide-db-migrations.html">di laman ini</a>.</p>
<p>Untuk memulai menggunakan fitur migration di Yii, pastikan kita sudah membuat forlder <strong><span style="font-family:courier new,courier,monospace">migrations</span> </strong>di dalam folder framework yii kita. Sesuai dengan <a href="
http://pojokprogrammer.net/content/aplikasi-inventory-sederhana-analisa…" target="_blank">desain database yang sudah kita buat sebelumnya</a>, maka kita perlu membuat migrasi untuk 4 (empat) buat tabel, yaitu <strong><span style="font-family:courier new,courier,monospace">items</span></strong>, <strong><span style="font-family:courier new,courier,monospace">transaction_types</span></strong>, <strong><span style="font-family:courier new,courier,monospace">transactions</span></strong>, dan <strong><span style="font-family:courier new,courier,monospace">transaction_details</span></strong>.</p>
<p>Jalankan perintah berikut untuk membuat migrasi table <strong><span style="font-family:courier new,courier,monospace">items</span></strong>.</p>
<pre>
yii migrate/create create_table_items</pre>
<p>Yii kemudian akan menanyakan apakah kita benar akan membuat migrasi, jawablah dengan <strong><span style="font-family:courier new,courier,monospace">yes</span></strong>.</p>
<p><img alt="Aplikasi Persediaan Barang (Sistem Inventory) Menggunakan Yii2 Yii Migration" src="/sites/default/files/pictures/yii-migrations-create1.png" style="height:180px; width:714px" /></p>
<p>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.</p>
<pre>
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');
}
</pre>
<p>Berikutnya kita buatkan migrasi untuk tabel <strong><span style="font-family:courier new,courier,monospace">transaction_types </span></strong>dengan menjalankan perintah ini</p>
<pre>
yii migrate/create create_table_transaction_types</pre>
<p><img alt="Aplikasi Persediaan Barang (Sistem Inventory) Menggunakan Yii2 Yii Migration" src="/sites/default/files/pictures/yii-migrations-create2.png" style="height:180px; width:714px" /></p>
<p>Kemudian tambahkan kode berikut ini untuk membuat tabel <strong><span style="font-family:courier new,courier,monospace">transaction_types</span></strong>. 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. </p>
<pre>
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');
}
</pre>
<p>Berikutnya kita buatkan migrasi untuk tabel <strong><span style="font-family:courier new,courier,monospace">transactions </span></strong>dengan menjalankan perintah ini</p>
<pre>
yii migrate/create create_table_transactions</pre>
<p><img alt="Aplikasi Persediaan Barang (Sistem Inventory) Menggunakan Yii2 Yii Migration" src="/sites/default/files/pictures/yii-migrations-create3.png" style="height:180px; width:714px" /></p>
<p>Kemudian tambahkan kode berikut ini. Karena tabel <strong><span style="font-family:courier new,courier,monospace">transactions</span></strong> ini memiliki relasi dengan tabel <strong><span style="font-family:courier new,courier,monospace">transaction_types</span></strong>, maka kita juga perlu menambahkan kode untuk men-<em>generate </em>relasi <em>foreign key </em>seperti tampak pada kode di bawah ini.</p>
<pre>
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');
}
</pre>
<p>Berikutnya kita buatkan migrasi untuk tabel <strong><span style="font-family:courier new,courier,monospace">transaction_details </span></strong>dengan menjalankan perintah ini</p>
<pre>
yii migrate/create create_table_transaction_details</pre>
<p><img alt="Aplikasi Persediaan Barang (Sistem Inventory) Menggunakan Yii2 Yii Migration" src="/sites/default/files/pictures/yii-migrations-create4.png" style="height:180px; width:714px" /></p>
<p>Kemudian tambahkan kode berikut ini. Karena kita <strong><span style="font-family:courier new,courier,monospace">transaction_details</span></strong> ini memiliki relasi dengan tabel <strong><span style="font-family:courier new,courier,monospace">transactions</span></strong> dan tabel <strong><span style="font-family:courier new,courier,monospace">items</span></strong> maka kita juga perlu menambahkan kode untuk men-<em>generate </em>relasi <em>foreign key </em>seperti tampak pada kode di bawah ini.</p>
<pre>
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');
}
</pre>
<p>Jangan lupa ditambahkan baris berikut ini di setaip file migration, karena kita menggunakan class Schema untuk mendefinisikan tipe data field. </p>
<pre>use yii\db\Schema;</pre>
<p>Setelah semua migrasi kita siapkan, maka yang perlu kita lakukan adalah mengeksekusi migrasi tersebut. Caranya sangat mudah cukup dengan menjalankan perintah </p>
<pre>
yii migrate</pre>
<p>Contoh hasil eksekusinya tampak pada screenshot di bawah ini.</p>
<p><img alt="" src="/sites/default/files/pictures/yii-migrations2.png" style="height:474px; width:720px" /></p>
<p>Kode sumber (<em>source code</em>) bisa dilihat <a href="
https://github.com/hidayat365/training3"><strong>di laman ini</strong></a>.</p>
<h2>Generate Models Menggunakan Gii</h2>
<p>Yii menyediakan <strong>extension Gii </strong>untuk memudahkan kita men-generate code untuk models, forms, CRUD, modules dan sebagainya. Gii bisa diakses melalui URL</p>
<pre>
http://localhost/path/to/index.php?r=gii
</pre>
<p>Atau jika kamu sudah menggunakan fitur pretty URL, maka Gii dapat diakses di</p>
<pre>
http://localhost/path/to/index.php/gii
</pre>
<p>Berikutnya silakan buka Model Generator agar kita bisa men-generate models untuk database kita. Seperti tampak pada screenshot di bawah ini.</p>
<p>