Laporan Praktikum Web 8
A. Tujuan Praktikum
Praktikum ini bertujuan agar praktikan mampu memahami dan mengimplementasikan konsep relasi basis data (terutama One-to-Many dan Many-to-Many) menggunakan fitur Eloquent ORM pada framework Laravel. Selain itu, praktikan juga dituntut untuk mampu membuat skema migration dengan aturan foreign key yang tepat, dan menampilkan data hasil relasi tersebut pada view antarmuka aplikasi.
B. Persiapan dan Konfigurasi Database
Tahap awal dilakukan dengan melakukan inisialisasi *project* Laravel baru yang diberi nama laravel-relationship. Setelah proyek berhasil dibuat, dilakukan konfigurasi environment pada file .env. Penyesuaian dilakukan pada parameter koneksi database agar framework terhubung ke basis data MySQL bernama db_laravel_relationship.
C. Perancangan Skema Database (Migration & Seeding)
Proses ini membangun arsitektur tabel berdasarkan *Entity Relationship Diagram* (ERD) sistem akademik. Dibuat empat file migration yang dieksekusi secara berurutan: tabel majors, students, subjects, dan tabel *pivot* student_subject. Bersamaan dengan itu, dijalankan proses *Database Seeder* untuk menyuntikkan data *dummy* secara otomatis.
Pembentukan relasi secara struktural ini dibuktikan dengan melihat arsitektur dan isi tabel *pivot* di dalam phpMyAdmin, di mana Foreign Key berhasil terhubung secara konseptual ke tabel students dan subjects secara acak sesuai instruksi *seeder*.
D. Implementasi Eloquent Model Relationship
Langkah selanjutnya adalah mendefinisikan hubungan antar entitas di tingkat aplikasi menggunakan Model Laravel. Pada Model Major, ditambahkan method students() dengan relasi hasMany, karena satu program studi memiliki banyak mahasiswa.
Pada Model Student, digunakan method belongsTo (untuk relasi balik ke jurusan) dan method belongsToMany (untuk relasi banyak-ke-banyak dengan mata kuliah).
Model Subject juga mengimplementasikan belongsToMany untuk memanggil data mahasiswa yang mengontrak mata kuliah terkait.
E. Controller dan Optimasi Query
Logika bisnis (CRUD) diimplementasikan pada StudentController dan rutenya didaftarkan menggunakan Route::resource pada file web.php.
Pada method index(), pemanggilan data dilakukan menggunakan teknik Eager Loading melalui sintaks Student::with(['major', 'subjects']). Teknik ini sangat krusial untuk mencegah masalah N+1 Query Problem yang dapat membebani kinerja *server* saat memanggil banyak data berelasi sekaligus.
Pada saat penyimpanan data (method store), sistem menggunakan fungsi attach() untuk menyisipkan data baru secara berganda ke dalam tabel *pivot*.
Sementara pada proses pembaruan data (method update), sistem memanfaatkan fungsi sync() yang secara pintar akan menghapus *record* relasi lama dan menggantinya dengan relasi baru di tabel *pivot* tanpa menyebabkan duplikasi.
F. User Interface (Views)
Antarmuka dibangun dengan integrasi kerangka kerja Bootstrap. Pada halaman utama (Index), data yang diambil melalui ORM di-render menggunakan perulangan Blade @foreach. Sistem memanfaatkan properti dinamis (seperti $student->major->name) dan agregat *Collection* sum('sks') untuk menampilkan total SKS. Pengujian penambahan data (*create*) menggunakan dropdown jurusan dan sekumpulan checkbox mata kuliah juga berhasil diproses dan dikembalikan ke halaman *index* dengan *session flash message* sukses.
G. Jawaban Latihan (Eksplorasi Query Menggunakan Tinker)
Selain mengimplementasikan antarmuka grafis, pengujian pemahaman struktur ORM dilakukan melalui antarmuka *Command Line* Laravel Tinker.
Soal 2: Menampilkan Jurusan yang memiliki mahasiswa terbanyak.
Penyelesaian menggunakan sintaks withCount() yang dipadukan dengan agregat orderBy secara descending untuk menarik record tertinggi secara efisien.
Soal 3: Menampilkan Mata kuliah yang diambil oleh mahasiswa tertentu (ID 1).
Penyelesaian dilakukan dengan mencari entri mahasiswa menggunakan find(), lalu secara langsung mengakses *property collection* subjects miliknya.
H. Kesimpulan
Berdasarkan praktikum yang telah dilakukan, dapat disimpulkan bahwa implementasi relationship (terutama struktur One-to-Many dan Many-to-Many yang kompleks dengan tabel *pivot*) sangat krusial dalam pengembangan sistem basis data modern. Penggunaan fitur Eloquent ORM dan fungsionalitas eager loading pada framework Laravel terbukti secara signifikan menyederhanakan proses kueri basis data dan meningkatkan keterbacaan kode (clean code), sehingga mempermudah proses pemeliharaan serta skalabilitas perangkat lunak di masa mendatang.