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
🎬 Golang Ticket Booking System from Scratch – No Framework (Part 2)
Pada part kedua dari seri "Ticket Booking System with Golang (Tanpa Framework)", kita akan mulai masuk ke bagian yang lebih "serius", yaitu: Menyelesaikan fungsi MarkSeatAsBooked Menambahkan unit test untuk fungsi tersebut Melakukan simulasi race ...
Panic, defer dan recovery di Golang
Halo teman-teman! 👋Di artikel kali ini, kita akan bahas salah satu topik penting di Golang yang sering bikin bingung pemula, yaitu panic, defer, dan recover. Ini adalah bagian dari error handling di Go, dan sangat penting dipahami supaya program kit...
Tipe Data Array, Slice, dan Map di Golang
Setelah sebelumnya kita sudah membahas tipe data string, boolean dan number, sekarang kita lanjutkan dengan beberapa tipe data penting yang sering digunakan, yaitu Array, Slice, dan Map. Array digunakan untuk menyimpan sejumlah elemen dengan panjan...