Dalam pengembangan aplikasi web berbasis database, hubungan antar tabel (relationship) merupakan konsep yang sangat fundamental. Laravel sebagai salah satu framework PHP yang populer menyediakan fitur Eloquent ORM (Object-Relational Mapping) yang memudahkan developer dalam mendefinisikan dan mengelola hubungan antar tabel secara elegan melalui pendekatan berbasis model.
Praktikum ini berfokus pada implementasi sistem manajemen akademik sederhana yang melibatkan tiga entitas utama: Mahasiswa (Student), Jurusan (Major), dan Mata Kuliah (Subject). Ketiga entitas tersebut saling berhubungan membentuk dua jenis relationship:
student_subject
student_subject.
Praktikum ini juga memperkenalkan konsep Eager Loading sebagai solusi untuk mencegah masalah N+1 Query yang umum terjadi saat bekerja dengan data yang memiliki banyak relasi.
Memahami konsep dan jenis-jenis relationship dalam Laravel Eloquent (One-to-Many dan Many-to-Many).
Membuat file migration dengan mendefinisikan foreign key dan tabel pivot.
Mengimplementasikan method relationship (hasMany, belongsTo, belongsToMany) pada masing-masing model.
Menggunakan Seeder untuk mengisi data awal (sample data) ke dalam database.
Membuat Controller dengan operasi CRUD lengkap yang memanfaatkan Eloquent Relationship.
Menggunakan Eager Loading (with()) untuk mengoptimalkan query data yang berelasi.
Menampilkan data relationship di dalam View menggunakan Blade Template Engine.
Migration digunakan untuk mendefinisikan struktur tabel secara terprogram. Terdapat empat tabel yang perlu dibuat.
majorsIsi file migration:
Tabel ini menyimpan id dan name sebagai data jurusan.
students
Kolom major_id adalah foreign key yang merujuk ke tabel majors.
Opsi onDelete('cascade') memastikan data mahasiswa ikut terhapus jika jurusannya dihapus.
subjectsstudent_subject
Tabel pivot ini menjadi penghubung relasi Many-to-Many antara students dan subjects.
Constraint unique mencegah satu mahasiswa mendaftar mata kuliah yang sama lebih dari sekali.
| Method | Digunakan Pada | Arti |
|---|---|---|
hasMany |
Major | Satu jurusan punya banyak mahasiswa |
belongsTo |
Student | Mahasiswa milik satu jurusan |
belongsToMany |
Student & Subject | Relasi banyak ke banyak via pivot |
Seeder digunakan untuk mengisi database dengan data sampel awal.
Mengisi 4 data jurusan: Teknik Informatika, Sistem Informasi, Teknik Komputer, dan Manajemen Informatika.
Mengisi 5 mata kuliah beserta jumlah SKS-nya.
Mengisi 5 data mahasiswa dan menghubungkan masing-masing ke 2โ4 mata kuliah secara acak
menggunakan method attach():
Daftarkan ketiga seeder secara berurutan:
StudentController memiliki tujuh method utama:
| Method | Fungsi |
|---|---|
index() | Menampilkan semua mahasiswa dengan eager loading |
show($id) | Menampilkan detail satu mahasiswa |
create() | Menampilkan form tambah mahasiswa |
store(Request $request) | Menyimpan data mahasiswa baru + relasi subject via attach() |
edit($id) | Menampilkan form edit mahasiswa |
update(Request $request, $id) | Memperbarui data + sinkronisasi relasi subject via sync() |
destroy($id) | Menghapus mahasiswa + melepas semua relasi via detach() |
attach()sync()detach()Digunakan untuk mencegah masalah N+1 Query:
routes/web.php
Satu baris ini secara otomatis menghasilkan seluruh route CRUD:
index, create, store, show,
edit, update, dan destroy.
Dibuat tiga file view utama menggunakan Blade Template Engine:
layouts/app.blade.phpLayout utama yang menyertakan Bootstrap 5 dan navbar sebagai kerangka tampilan bersama.
students/index.blade.phpMenampilkan daftar mahasiswa dalam tabel, termasuk nama jurusan, daftar badge mata kuliah, dan total SKS yang dihitung langsung dari relasi:
students/create.blade.php
Form untuk menambahkan mahasiswa baru, dengan dropdown jurusan (dari tabel majors)
dan checkbox mata kuliah (dari tabel subjects).
Melalui praktikum ini berhasil diimplementasikan sebuah sistem manajemen akademik sederhana berbasis Laravel yang mencakup seluruh fitur berikut:
student_subject berhasil dibuat untuk mengelola relasi Many-to-Many
dengan mencegah data duplikat.
attach(), sync(), dan detach().
hasMany / belongsTo)
digunakan saat satu entitas memiliki banyak entitas lain, seperti satu jurusan yang
memiliki banyak mahasiswa.
belongsToMany) dikelola melalui tabel
pivot dan membutuhkan method attach(), sync(), serta
detach() untuk mengelola data pada tabel pivot tersebut.
with() sangat penting untuk mencegah
masalah N+1 Query agar performa aplikasi tetap optimal saat mengambil data dengan banyak
relasi.
subjects.