Tutorial Laravel: Membuat Sistem Pengaduan Masyarakat (Tahap 2: Setup Multi-Role Migration & Model)

Setelah berhasil melakukan setup project dan koneksi database di Tahap 1, langkah penting selanjutnya adalah merancang struktur basis data (database schema).
Pada Tahap 2 ini, kita akan membuat tabel users dengan fitur Multi-Role (Admin & User/Masyarakat) serta tabel complaints untuk menampung data laporan pengaduan beserta file foto buktinya.
📋 Ringkasan Tahap 2
- Tujuan: Membuat migration dan model Eloquent untuk tabel
users(multi-role) dancomplaints(relasi database). - Fitur Utama: Penambahan role user/admin dan penyiapan struktur data pengaduan.
- Estimasi Waktu: 5 – 7 Menit.
🛠️ Langkah-Langkah Eksekusi
1. Modifikasi Migration Tabel users
Default-nya Laravel sudah menyediakan file migration untuk tabel pengguna. Kita hanya perlu menambahkan kolom role untuk membedakan hak akses.
Buka file migration users di path:database/migrations/xxxx_xx_xx_xxxxxx_create_users_table.php
Ubah bagian fungsi up() menjadi seperti ini:
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->enum('role', ['admin', 'user'])->default('user'); // <-- Ditambahkan
$table->rememberToken();
$table->timestamps();
});
2. Membuat Model & Migration Tabel complaints
Selanjutnya, kita buat Model dan Migration untuk penampung data pengaduan secara bersamaan menggunakan perintah Artisan:
php artisan make:model Complaint -m
Buka file migration pengaduan yang baru tercipta di:
database/migrations/xxxx_xx_xx_xxxxxx_create_complaints_table.php
Isi struktur kolomnya sebagai berikut:
Schema::create('complaints', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained('users')->onDelete('cascade'); // Relasi ke User
$table->string('title');
$table->text('description');
$table->string('image')->nullable(); // Menampung path foto
$table->enum('status', ['pending', 'processing', 'resolved', 'rejected'])->default('pending');
$table->text('admin_response')->nullable(); // Tanggapan dari admin
$table->timestamps();
});
3. Konfigurasi Model Eloquent & Relasi Data
Buka kedua file Model untuk mengizinkan input data (Mass Assignment) serta menghubungkan relasi antar tabel.
- File
app/Models/User.phpTambahkan kolomrolepada$fillabledan buat relasi One-to-Many keComplaint:
protected $fillable = [
'name',
'email',
'password',
'role',
];
public function complaints()
{
return $this->hasMany(Complaint::class);
}
File app/Models/Complaint.php
Daftarkan kolom masukan dan buat relasi Belongs-To ke User:
protected $fillable = [
'user_id',
'title',
'description',
'image',
'status',
'admin_response',
];
public function user()
{
return $this->belongsTo(User::class);
}
4. Menjalankan Migration ke Database
Untuk mengubah kode PHP migration tadi menjadi tabel sungguhan di MySQL, jalankan perintah berikut di terminal:
php artisan migrate
💡 Tips: Jika proses berhasil, kamu bisa mengecek phpMyAdmin. Kamu akan melihat tabel users dan complaints sudah terbentuk rapi beserta kunci relasinya (Foreign Key).
Created by : Dimas Yoga Eka Prasetiya
