Merancang Database dengan Mudah dengan Migration Laravel
Bismillahirrahmanirrahim.
Migration sederhananya merupakan cara yang digunakan untuk membuat database tanpa menggunakan perintah SQL tetapi di-generate melalui eksekusi menggunakan kode program.
Meskipun database yang dibuat tanpa melalui queri SQL, kita harus tetap menyediakan data yang diperlukan dalam pengembangan aplikasi yaitu tabel-tabel dan atribut-atribut yang dibutuhkan.
Sebelum membuat database, hapus terlebih dahulu seluruh isi file migrations yang ada pada folder database\migrations
.
Membuat File Migrasi
Untuk membuat file migration, jalankan perintah:
php artisan make:migration create_students_table
Outputnya:
Created Migration: 2021_04_02_102318_create_students_table
php
, untuk menjalankan PHP (dibutuhkan oleh Artisan CLI).artisan
, memanggil artisan itu sendiri.make:
, perintah untuk membuat folder baru diikuti parametermigration
yang menunjukkan bahwa kita akan membuat file migration. Untuk file lainnya, ganti parametermigration
sesuai kebutuhan.create_students_table
, parameter yang menginformasikan Artisan bahwa file migration yang akan dibuat adalah tabel students. Perlu diperhatikan bahwa awalancreate_
sebagai informasi untuk membuat tabel. Dengan demikian, Artisan akan men-generate file migration dengan lebih lengkap jika tanpa awalancreate_
.
Isi file yang dihasilkan dapat dilihat pada file migration ter-generate di folder database
.
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateStudentsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('students', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('students');
}
}
Salah satu tips yang juga sangat berguna adalah mengikuti aturan penamaan standar Laravel, hal ini sangat membantu kita. Contoh yang bisa kita terapkan dalam pembuatan file migration adalah pada Laravel nama sebuah tabel ditandai dengan kata jamak sedangkan untuk modelnya dikenali dengan dengan kata tunggal. Artinya untuk model dengan nama
User
akan dipadankan dengan tabel dengan namausers
dan untuk model dengan namaBook
akan dipadankan dengan tabel dengan namabooks
. Jika kita tidak mengikuti aturan penamaan ini, kita perlu menentukan secara manual apa nama tabel yang berpadanan dengan model kita.
Melengkapi File Migrasi
Lengkapi fungsi up()
pada file migration create_students_table
:
<?php
...
class CreateStudentsTable extends Migration
{
public function up()
{
Schema::create('students', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('nama');
$table->string('nim');
$table->string('kelas');
$table->string('jurusan');
$table->unsignedInteger('angkatan');
$table->timestamps();
});
}
...
}
Keterangan baris kode di atas:
Scheme::create('students, ...)
, kode untuk membuat tabel,students
merupakan nama tabel yang akan dibuat.$table->bigIncrements('id')
, kode untuk membuat atributid
yang bertipe data big int, unsigned (tidak boleh bernilai negatif),not null (tidak boleh kosong), auto_increment (id
akan bertambah satu saat ada data baru), dan dijadikan primary key.$table->string('nama')
, membuat atributnama
dengan tipe data varchar(255) dan not null. Hal ini pun sama untuknim
,kelas
, danjurusan
.$table->unsignedInteger('angkatan')
, membuat atributangkatan
dengan tipe data int, unsigned (tidak boleh negatif), dan not null.$table->timestamps()
, untuk membuat atributcreated_at
danupdated_at
yaitu timestamp (membuat tanggal dan waktu), null (bersifat opsional).
Mengeksekusi File Migrasi
Kita akan gunakan Artisan CLI untuk mengeksekusi file migrasi. Pastikan konfigurasi koneksi ke database sudah dilakukan di file .env
.
php artisan migrate
Setelah dijalankan error berikut ditemui:
Illuminate\Database\QueryException
could not find driver (SQL: select * from information_schema.tables where table_schema = blog and table_name = migrations and table_type = 'BASE TABLE')
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:678
674▕ // If an exception occurs when attempting to run a query, we'll format the error
675▕ // message to include the bindings with SQL, which will make this exception a
676▕ // lot more helpful to the developer instead of just the database's errors.
677▕ catch (Exception $e) {
➜ 678▕ throw new QueryException(
679▕ $query, $this->prepareBindings($bindings), $e
680▕ );
681▕ }
682▕
+33 vendor frames
34 artisan:37
Illuminate\Foundation\Console\Kernel::handle()
Saat mencari referensi error tersebut, ditemukan forum yang memberikan solusi untuk meng-enable ;extension=php_pdo_mysql.dll
di dalam file php.ini
.
sudo nano /etc/php/php.ini
Saya menemukan baris ;extension=pdo_mysql
dan langsung saja saya hilangkan tanda ;
, kemudian menyimpan dan menutup file.
Saat ini dieksekusi kembali perintah php artisan migrate
dan didapati error berikut:
...
SQLSTATE[HY000] [1049] Unknown database 'blog' (SQL: select * from information_schema.tables where table_schema = blog and table_name = migrations and table_type = 'BASE TABLE')
...
Untuk mengatasiya, buat database dengan nama blog
terlebih dahulu. Saya melakukannya melalui command line. Jalankan perintah berikut untuk dapat mengakses database.
mysql -p -u root
Enter password: #Type your password
Kemudian membuat database-nya:
create database blog;
Selanjutnya dieksekusi kembali php artisan migrate
dan didapati output seperti ini:
Migration table created successfully.
Migrating: 2021_04_02_102318_create_students_table
Migrated: 2021_04_02_102318_create_students_table (271.52ms)
Setelah diperiksa di database baik melalui phpMyAdmin atau dari command line dapat dilihat telah ada tabel baru dengan nama migrate
dan students
di dalam database blog
. Berikut isi tabelnya saat dilakukan perintah SELECT
.
MariaDB [blog]> select * from migrations;
+----+-----------------------------------------+-------+
| id | migration | batch |
+----+-----------------------------------------+-------+
| 1 | 2021_04_02_102318_create_students_table | 1 |
+----+-----------------------------------------+-------+
1 row in set (0.024 sec)
MariaDB [blog]> select * from students;
Empty set (0.064 sec)
Isi tabel students
masih kosong. Untuk melihat struktur filenya jalankan perintah DESC
.
MariaDB [blog]> DESC students;
+------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| nama | varchar(255) | NO | | NULL | |
| nim | varchar(255) | NO | | NULL | |
| kelas | varchar(255) | NO | | NULL | |
| jurusan | varchar(255) | NO | | NULL | |
| angkatan | int(10) unsigned | NO | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+------------+---------------------+------+-----+---------+----------------+
8 rows in set (0.116 sec)
Dengan demikian, pembuatan tabel dengan php Artisan telah berhasil.
Kelebihan Migration
Dalam pembuatan database dalam pengembangan aplikasi tidak diwajibkan menggunakan migration. Sah-sah saja membuat database dengan menggunakan query SQL atau yang lebih mudah membuat database dengan bantuan DBMS (Database Management System) seperti phpMyAdmin.
Namun, jika kita dapat menggunakan migration dalam pembuatan database tentu akan dirasakan perbedaannya. Waktu yang digunakan pun lebih efisien sehingga pengembangan aplikasi dapat dilakukan dengan lebih cepat.
Berikut beberapa kelebihannya:
- Tidak membutuhkan file
.sql
untuk men-generate database yang kita buat jika orang lain ingin menggunakan aplikasi kita. - Terdapat catatan perubahan terhadap database yang dibuat. Jadi, jika sewaktu-waktu kita melakukan perubahan skema pada database seperti atributnya maka migration ini akan mencatat perubahannya.
- Memiliki sintaks yang sederhana untuk men-generate sebuah database.