Membuat Tabel dengan Migrations
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 methodcreate()
dari classSchema
.$table->increments('id');
method untuk membuat increment field dengan namaid
.$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, yaitudrafted
danpublished
, dan menjadikandrafted
sebagai nilai default.$table->timestamps();
merupakan method yang secara otomatis akan membuat dua buah field dengan namacreated_at
danupdated_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 namauser_id
, dan meletakkannya setelah fieldid
dengan menggunakan methodafter()
. Selain itu, sebelum blok script tersebut dibuat, juga ditambahkan pengecekan untuk memastikan tabelpages
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. 😉