Mengenal Database Migration di Laravel

Mahir Koding – Ada sebuah fitur/keunggulan tersendiri bagi kamu pengguna framework laravel. Yap, hanya di laravel kita dapat membuat melalui “migration”. Dengan fitur ini, proses pembuatan dan modifikasi tabel database dapat dilakukan dalam script PHP. Penggunaan database migration ini akan sangat “terasa” bagi kamu yang terbiasa dalam pengembangan sistem bersama tim dimana dalam pengerjaan sistem biasanya dikerjakan lebih dari 1 orang. Setiap ada perubahan tabel, maka akan tersimpan di source control seperti git. Selain itu, kamu juga dapat melakukan undo dan redo perubahan database dengan mudah.

Sebelum dapat membuat tabel melalui migration, kita wajib melakukan konfigurasi database terlebih dahulu (baca disini) dan membuat file migration. Jalankan command di bawah ini di terminal/command prompt untuk membuat file migration. Pastikan sudah mengganti active directory (cd) ke folder htdocs/namaweb.

php artisan make:migration buat_tabel_siswa

Database Migration laravel

Maka, akan terbentuk sebuah file baru 2016_08_29_070454_buat_tabel_siswa.php di folder database/migrations. Isinya seperti ini :

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class BuatTabelSiswa extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
//
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}

Dalam file tersebut terdapat 2 function yakni :

  • Function up() : Berisi perubahan struktur database yang kita inginkan.
  • Function down() : Berisi pembatalan aksi terhadap perubahan struktur yang dilakukan oleh function up().

Selanjutnya, kita akan mencoba membuat tabel “siswa” dengan field id, nama, umur dan alamat.

public function up()
{
Schema::create('siswa', function(Blueprint $table)
{
$table->increments('id');
$table->string('nama');
$table->integer('umur');
$table->text('alamat')->nullable();
});
}

Method Schema::create di atas akan membuat sebuah tabel dengan nama “siswa” (sesuai dengan parameter 1). Tabel siswa sendiri akan terdiri dari beberapa column yakni :

  • id – auto increments dengan tipe data integer.
  • nama dengan tipe data varchar
  • integer dengan tipe data varchar
  • alamat dengan tipe data text dan bersifat nullable (boleh tidak disi alias kosong).

Dan masih ada juga beberapa method yang dapat kamu gunakan dalam membuat tabel :

Command Description
$table->bigIncrements('id'); Incrementing ID (primary key) using a “UNSIGNED BIG INTEGER” equivalent.
$table->bigInteger('votes'); BIGINT equivalent for the database.
$table->binary('data'); BLOB equivalent for the database.
$table->boolean('confirmed'); BOOLEAN equivalent for the database.
$table->char('name', 4); CHAR equivalent with a length.
$table->date('created_at'); DATE equivalent for the database.
$table->dateTime('created_at'); DATETIME equivalent for the database.
$table->dateTimeTz('created_at'); DATETIME (with timezone) equivalent for the database.
$table->decimal('amount', 5, 2); DECIMAL equivalent with a precision and scale.
$table->double('column', 15, 8); DOUBLE equivalent with precision, 15 digits in total and 8 after the decimal point.
$table->enum('choices', ['foo', 'bar']); ENUM equivalent for the database.
$table->float('amount'); FLOAT equivalent for the database.
$table->increments('id'); Incrementing ID (primary key) using a “UNSIGNED INTEGER” equivalent.
$table->integer('votes'); INTEGER equivalent for the database.
$table->ipAddress('visitor'); IP address equivalent for the database.
$table->json('options'); JSON equivalent for the database.
$table->jsonb('options'); JSONB equivalent for the database.
$table->longText('description'); LONGTEXT equivalent for the database.
$table->macAddress('device'); MAC address equivalent for the database.
$table->mediumInteger('numbers'); MEDIUMINT equivalent for the database.
$table->mediumText('description'); MEDIUMTEXT equivalent for the database.
$table->morphs('taggable'); Adds INTEGER taggable_id and STRING taggable_type.
$table->nullableTimestamps(); Same as timestamps(), except allows NULLs.
$table->rememberToken(); Adds remember_token as VARCHAR(100) NULL.
$table->smallInteger('votes'); SMALLINT equivalent for the database.
$table->softDeletes(); Adds deleted_at column for soft deletes.
$table->string('email'); VARCHAR equivalent column.
$table->string('name', 100); VARCHAR equivalent with a length.
$table->text('description'); TEXT equivalent for the database.
$table->time('sunrise'); TIME equivalent for the database.
$table->timeTz('sunrise'); TIME (with timezone) equivalent for the database.
$table->tinyInteger('numbers'); TINYINT equivalent for the database.
$table->timestamp('added_on'); TIMESTAMP equivalent for the database.
$table->timestampTz('added_on'); TIMESTAMP (with timezone) equivalent for the database.
$table->timestamps(); Adds created_at and updated_at columns.
$table->uuid('id'); UUID equivalent for the database.
Credit to laravel’s documentation.

Lalu, jangan lupa untuk mengisi function down()nya juga sebagai kebalikan dari function up() maka kita akan melakukan drop table siswa.

public function down()
{
Schema::drop('siswa');
}

Jika sudah, save file tersebut lalu jalankan perintah migrate di terminal/command prompt tadi.

php artisan migrate

Database Migration laravel

Selesai, maka akan terbuat tabel siswa dengan field id, nama, umur dan alamat. Silahkan cek hasilnya via phpmyadmin.

Database Migration laravel