Pembuatan Database Migrations
Contents
Salah satu prinsip pembuatan database migration (serta pembuatan tabel di database pada umumnya) adalah: dahulukan pembuatan tabel yang tidak memiliki ketergantungan dengan tabel lain. Atau dengan kata lain, dahulukan tabel yang tidak memiliki foreign key. Maka yang pertama akan kita lakukan adalah memodifikasi tabel users agar memuat kolom nik, telp, dan level. Lalu kita buat tabel pengaduan, yang memiliki referensi ke tabel users, dan terakhir kita buat tabel tanggapan yang memiliki referensi ke tabel pengaduan dan users.
Memodifikasi Tabel users
Buka terminal, lalu jalankan:
php artisan make:migration add_columns_to_users_table
Akan muncul pesan semacam ini:
INFO Migration [C:\laragon\www\pelaporan\database\migrations/2023_03_14_100916_add_columns_to_users_table.php] created successfully.
Tekan tombol Ctrl lalu klik pada nama file yg dihasilkan tersebut, atau buka melalui Explorer milik VSCode, pada folder database\migrations. Sesuaikan kode pada bagian komentar di blok public function up()
menjadi seperti ini:
public function up() { Schema::table('users', function (Blueprint $table) { $table->string('nik',16)->unique()->nullable()->after('password'); $table->string('telp',20)->after('nik'); $table->enum('level',['administrator','petugas','masyarakat']) ->default('masyarakat')->after('telp'); }); }
Nantinya, kode tersebut akan menyisipkan kolom yang diperlukan pada tabel users yang sudah ada. Pada kode tersebut, kita memberitahukan kepada DBMS yang digunakan bahwa kolom nik nantinya berupa string berukuran 16 digit, unik (tidak boleh ada nik yang sama antar user), namun bersifat nullable sehingga boleh dikosongkan. Kemudian, modifier default('masyarakat')
akan membuat kolom level terisi dengan value “masyarakat” saat ada yang registrasi. Perlu diingat juga, bahwa modifier after()
yang kita gunakan tersebut hanya berlaku di MySQL dan MariaDB, jadi tidak bisa digunakan di DBMS lain.
Laravel mendeteksi bahwa operasi yang akan dilakukan adalah penambahan kolom pada tabel users, menggunakan library TableGuesser, sesuai format nama migration yang kita gunakan: add_columns_to_users_table, begitu pula dengan penamaan migration yang akan kita gunakan pada bagian berikutnya. Canggih ya?
Menambahkan Tabel Pengaduan
Jalankan perintah berikut di terminal:
php artisan make:migration create_pengaduan_table
Dengan cara yang sama seperti sebelumnya, buka file yang dihasilkan lalu lengkapi public function up()
menjadi sebagai berikut:
public function up() { Schema::create('pengaduan', function (Blueprint $table) { $table->id(); $table->dateTime('tgl_pengaduan'); $table->foreignId('user_id')->constrained(); $table->text('isi_laporan'); $table->string('foto'); $table->enum('status', ['0','proses','selesai']); $table->timestamps(); }); }
Jika diamati, kode tersebut memiliki perbedaan pada bagian Schema::create()
, di mana sebelumnya untuk menambahkan kolom kita diberikan kode Schema::table()
, karena memang keperluannya berbeda. Lalu, isi dari blok Schema::create()
akan otomatis memiliki kode untuk pembuatan id (primary key) dan timestamps (created_at dan updated_at). Hal yang baru lainnya adalah penggunaan modifier foreignId()
dan constrained()
, di mana kita mendefinisikan kolom user_id menjadi foreign key yg merujuk pada tabel yang diasumsikan oleh Laravel akan bernama users. Nanti pada contoh lain akan kita temukan penggunaan yang berbeda atas modifier constrained()
.
Menambahkan Tabel Tanggapan
Jalankan perintah di terminal:
php artisan make:migration create_tanggapan_table
Dengan cara yang sama seperti sebelumnya, buka file yang dihasilkan lalu lengkapi public function up()
menjadi sebagai berikut:
public function up() { Schema::create('tanggapan', function (Blueprint $table) { $table->id(); $table->foreignId('pengaduan_id')->constrained('pengaduan'); $table->dateTime('tgl_tanggapan'); $table->text('tanggapan'); $table->foreignId('petugas_id')->constrained('users'); $table->timestamps(); }); }
Hal baru yang kita temukan adalah bahwa modifier constrained()
sekarang memuat nama tabel yang menjadi rujukan/referensi bagi foreign key yang kita buat. Jika tidak kita definisikan nama tabelnya, pada kode di atas TableGuesser milik Laravel akan menganggap pengaduan_id akan merujuk ke ID milik tabel bernama pengaduans, dan petugas_id dikira merujuk ke tabel bernama petugases. Argumen pada modifier constrained()
akan memberitahukan nama tabel yang digunakan sebagai rujukan.
Menjalankan Migration
Menjalankan migration di Laravel untuk pertama kalinya akan mengeksekusi semua file migrasi yang ada di dalam folder database\migrations, lalu mencatatnya ke dalam tabel migrations. Pada tutorial-tutorial mengenai Laravel UI, biasanya migration akan dijalankan pada tahap akhir instalasi Laravel UI. Namun untuk keperluan saat ini, kita akan menjalankan migration sebelum instalasi Laravel UI, karena struktur tabel yang dibutuhkan sudah disertakan sewaktu instalasi Laravel.
Sebelum menjalankan migration, pastikan semua file untuk keperluan migration sudah di-save. Jalankan perintah berikut untuk menjalankan migration:
php artisan migrate
Jika tidak ada error pada saat dijalankan, seharusnya tampilan yang didapatkan kurang lebih seperti ini:
Pada tahap ini, jika Anda cek pada phpMyAdmin, seharusnya semua struktur tabel yang diinginkan, beserta relasinya, sudah tercipta dengan rapih di MySQL. Bahkan jika Anda cek menggunakan fitur Designer, PDM (Physical Data Model) yang dihasilkan sudah ada garis penghubung relationship-nya.
Jika menemui error, teliti errornya dengan seksama, perbaiki, lalu jalankan migration kembali. Jika perlu, jalankan perintah:
php artisan migrate:fresh