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.

— id-laravel.com

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 statusrefresh 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