Doctor Booking App – Part 2: Membuat Model dan Relasi Database
Setelah menyelesaikan setup awal di Part 1, kali ini kita akan mulai membangun struktur data untuk aplikasi booking dokter. Kita akan membuat beberapa model penting dan mendefinisikan relasi antar tabel melalui migration.
1. Generate Model & Migration
Pertama, buat beberapa model berikut lengkap dengan migration dan factory:
php artisan make:model Doctor -mf
php artisan make:model DoctorSchedule -mf
php artisan make:model Speciality -mf
php artisan make:model Patient -mf
php artisan make:model Appointment -mf
php artisan make:model Prescription -mf2. Update Struktur Tabel
🔸 Users Table
Tambahkan kolom role untuk membedakan antara admin, dokter, dan pasien.
$table->enum('role', ['admin', 'doctor', 'patient'])->default('patient');🔸 Specialities Table
$table->string('name');
$table->string('description')->nullable();
$table->boolean('status')->default(true);🔸 Doctors Table
$table->string('name');
$table->foreignId('user_id')->constrained('users')->cascadeOnDelete();
$table->foreignId('speciality_id')->constrained('specialities')->cascadeOnDelete();
$table->string('image')->nullable();
$table->text('bio')->nullable();
$table->integer('experience')->nullable();
$table->boolean('is_featured')->default(true); // typo diperbaiki dari text('is_featured('status)🔸 Patients Table
$table->string('name');
$table->foreignId('user_id')->constrained('users')->cascadeOnDelete();
$table->text('bio')->nullable();🔸 Doctor Schedules Table
$table->foreignId('doctor_id')->constrained('doctors')->cascadeOnDelete();
$table->integer('available_day')->nullable(); // bisa gunakan 0–6 (minggu–sabtu)
$table->time('from');
$table->time('to');🔸 Appointments Table
$table->foreignId('doctor_id')->constrained('doctors')->cascadeOnDelete();
$table->foreignId('patient_id')->constrained('patients')->cascadeOnDelete();
$table->date('appointment_date');
$table->time('appointment_time');
$table->enum('status', ['completed', 'in-complete'])->default('in-complete');🔸 Prescriptions Table
$table->foreignId('doctor_id')->constrained('doctors')->cascadeOnDelete();
$table->foreignId('patient_id')->constrained('patients')->cascadeOnDelete();
$table->string('medication_name');
$table->string('dosage');
$table->string('frequency');
$table->string('instructions')->nullable();
$table->date('start_date')->nullable();
$table->date('end_date')->nullable();3. Migrasi Database
Setelah semua migration sudah disesuaikan, jalankan:
php artisan migrate:fresh4. Tambahkan Relasi di Model
🔹 Doctor Model
public function user()
{
return $this->belongsTo(User::class);
}
public function patients()
{
return $this->hasMany(Patient::class);
}
public function appointments()
{
return $this->hasMany(Appointment::class);
}🔹 DoctorSchedule Model
public function doctor()
{
return $this->belongsTo(Doctor::class);
}🔹 Patient Model
public function user()
{
return $this->belongsTo(User::class);
}
public function appointments()
{
return $this->hasMany(Appointment::class);
}🔹 Prescription Model
public function doctor()
{
return $this->belongsTo(Doctor::class);
}
public function patient()
{
return $this->belongsTo(Patient::class);
}🔹 User Model
public function doctor()
{
return $this->hasOne(Doctor::class);
}Penutup
Sampai di sini kita sudah menyusun struktur database untuk aplikasi Doctor Booking lengkap dengan relasi antar modelnya. Di tahap selanjutnya, kita akan mulai membuat panel admin untuk mengelola data dokter dan spesialisasi menggunakan Filament.
> Pastikan untuk commit setiap perubahan besar di Git agar progress development tetap aman.
More Articles
You might also like
Panduan Instalasi Golang di WSL 2 Ubuntu
Halo teman-teman! Pada tutorial ini, kita akan belajar cara menginstal Golang di WSL 2 Ubuntu dengan langkah-langkah yang mudah dipahami. Yuk, kita mulai! 1. Mengatur WSL ke Versi 2 Sebelum menginstal Golang, pastikan WSL (Windows Subsystem for Linux...
Membuat Goroutine di Golang
Halo teman-teman! Selamat datang di tutorial pertama tentang Goroutine di Golang. Jika kamu baru belajar pemrograman atau baru mengenal Go, jangan khawatir. Artikel ini akan menjelaskan konsep Goroutine dengan bahasa yang sederhana dan mudah dipahami...
Memahami Buffered Channel di Golang
Setelah kita belajar tentang channel dan WaitGroup, sekarang saatnya masuk ke topik yang lebih dalam: Buffered Channel. Artikel ini cocok buat kamu yang: Ingin tahu perbedaan antara unbuffered dan buffered channel Penasaran kapan harus menggunakan ...