Fitur migrations pada Laravel sejatinya sudah lama diperkenalkan. Dengan fitur ini, kita dimungkinkan untuk membuat dan memodifikasi tabel yang ada pada basisdata. Dengan begitu, kita tidak perlu dibuat repot untuk menjalankan syntax SQL dari terminal atau editor khusus. Cukup dengan satu perintah, maka perubahan di basisdata dapat dilakukan tanpa harus menggangu tabel dan data yang sudah ada.
Migrations pada dasarnya
bersifat agnostic, tak hanya spesifik di Laravel. Di beberapa framework PHP
modern hampir semuanya memiliki fitur ini. Bahkan, bukan hanya di PHP saja
adanya, di bahasa framework bahasa pemrograman lain pun tersedia. Migrations
seolah menjadi standar dalam modifikasi basisdata secara on the fly.
Sayangnya, di beberapa
aplikasi yang sudah cukup besar (tertentu), kita tidak diizinkan untuk
menggunakan migrations. Pasalnya, user basisdata yang digunakaan tidak punya
hak akses untuk menjalankan DDL (Data Definition Language). Walau begitu,
migrations tetap harus dibuat dengan pertimbangan:
·
Arsip
dan log perubahan pada basisdata
·
Kemudahan
development ketika bekerja dalam tim
Jika Anda pernah memakai
tools versioning seperti git atau SVN, maka konsep yang dibawa oleh database
migrations sejatinya sama, yaitu untuk mendokumentasikan setiap perubahan yang
terjadi terhadap skema database.
Cukup kata pengantarnya,
langsung saja masuk ke tahap pembuatan migrations pada Laravel.
Mengatur
Koneksi Basisdata
Sesuaikan pengaturan
basisdata pada berkas .env.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=root
Membuat
Berkas Migration
Berkas migrations
terletak pada direktori database/migrations. Mulai versi 5.3,
migrations yang berada pada vendor (misal: vendor/package/database/migrations) tetap berada di sana
tanpa menggangu direktori migrations utama.
Cara mudah membuat
berkas migrations adalah menggunakan artisan. Semisal, kita ingin membuat tabel baru
dengan nama pages.
$
php artisan make:migration create_pages_table — create=pages
Opsi --create pada perintah di
atas berfungsi untuk memberikan instruksi bahwa nama yang digunakan pada tabel
baru adalah pages.
Selengkapnya mengenai opsi dan aksi pada artisan dapat dilihat pada bantuan.
$
php artisan
Membuat
Tabel dengan Migrations
Dapat dilihat pada
direktori database/migrations, terdapat sebuah berkas baru dengan
penamaan kurang lebih seperti 2016_10_11_014905_create_pages_table.php. Prefix tanggal pada
berkas tersebut untuk menghindari konflik ketika dalam waktu bersamaan
developer membuat migrations serupa.
Isi dari berkas tersebut
kurang lebih sebagai berikut:
Dalam method up(), terdapat method create() dan class Schema yang berfungsi
untuk membuat tabel baru dengan nama pages. sedangkan di method down() sendiri berisi
method dropIfexists() dari class Schema yang berfungsi
untuk menghapus tabel pages apabila di-rollback.
Berikut sedikit
penjelasannya.
·
Schema::create('pages', function (Blueprint $table) {..} memanggil
method create() dari class Schema.
·
$table->increments('id'); method untuk membuat increment field
dengan nama id.
·
$table->string('slug', 150)->unique(); membuat field
string dengan panjang 150 karakter dan bersifat unik (UNIQUE).
·
$table->text('content'); membuat field text.
·
$table->enum('status', ['drafted',
'published'])->default('drafted'); membuat field enum dengan dua nilai,
yaitu drafted dan published, dan menjadikan drafted sebagai nilai
default.
·
$table->timestamps(); merupakan method yang secara
otomatis akan membuat dua buah field dengan nama created_at dan updated_at.
Menjalankan
Migrations
Dengan artisan, kita cukup menjalankan
perintah di bawah.
$
php artisan migrateMigrated: 2016_10_11_014905_create_pages_table
Untuk memastikan
tabel pages berhasil
dibuat, bisa dilakukan pengecekan melalui SQL editor pada basisdata sesuai
pengaturan di atas. Selain tabel pages, kita juga bakal mendapati tabel dengan
nama migrations. Tabel ini berfungsi untuk menyimpan informasi seputar
migrations yang kita buat.
Memodifikasi
Tabel dengan Migrations
Tak hanya membuat tabel
baru, dengan migration, kita juga bisa memodifikasi field atau opsi lain pada
tabel yang sudah ada. Semisal, dalam tabel pages, kita ingin menambahkan
field baru dengan nama user_id. Untuk inisiasi berkas migration-nya, menggunakan
perintah kurang lebih seperti di bawah.
$
php artisan make:migration add_user_id_field_to_pages_table — table=pages
Penamaan migrasi kali
ini sedikit lebih panjang. Hal ini bertujuan untuk memberikan informasi
sedetail mungkin tentang migrasi yang akan dijalankan. Opsi --table menginstruksikan
untuk menambahkan parameter nama tabel dan mengubah tabel yang sudah ada.
Dengan perintah di atas,
maka akan menghasilkan berkas baru dengan isi kurang lebih seperti ini.
Modifikasi berkas di
atas menjadi seperti di bawah Penjelasan singkatnya:$table->integer('user_id')->after('id'); menambahkan field
baru dengan nama user_id, dan meletakkannya setelah field id dengan menggunakan
method after(). Selain itu, sebelum blok script tersebut dibuat, juga
ditambahkan pengecekan untuk memastikan tabel pages memang sudah ada.
Rollback Migration
Sederhananya, rollback
bisa berarti membatalkan aksi terakhir dari migrations. Di Laravel versi 5.3,
kita dapat menentukan sendiri jumlah langkah rollback migrations. Satu langkah
berarti satu berkas migrations.
$
php artisan migrate:rollbackRolled back: 2016_10_11_014905_create_pages_table
Dalam versi 5.3, dapat
menggunakan opsistep.
$
php artisan migrate:rollback --step=2
Apabila ingin
membatalkan semua migration, maka cukup dengan menjalankan perintah php artisan
migrate:reset.
Masih ada tiga aksi lagi
yang tersedia pada migration, ialah status, refresh dan install, yang ketiganya
berfungsi sebagai berikut:
·
install membuat repositori migrations.
·
refresh rollback sepenuhnya migration, kemudian
menjalankan ulang migrations tersebut dari awal.
·
status memeriksa status migrasi saat ini.
php
artisan migrate:status
+------+------------------------------------------------+
| Ran? | Migration |
+------+------------------------------------------------+
| Y |
2014_10_12_000000_create_users_table
|
| N |
2014_10_12_100000_create_password_resets_table |
| N |
2016_10_11_014905_create_pages_table
|
+------+------------------------------------------------+
Selain membuat tabel dan
memodifikasinya, masih ada banyak hal yang dapat dilakukan dengan migrations
pada Laravel. Aksi lainnya semisal menghapus atau mengganti nama tabel yang
sudah ada, menghapus field, membuat indeks, foreign key, dan lainnya. Tutorial
di atas merupakan basic yang sudah mencakup sebagian besar fitur migrations,
sisanya, silakan pelajari sendiri melalui laman official Laravel. 😉
Comments
Post a Comment