PWEB 10 – LARAVEL RELATIONSHIP

Tujuan Pembelajaran

Setelah menyelesaikan praktikum ini, maka pembaca diharapkan dapat:

  1. Memahami konsep relationship dalam Laravel
  2. Mengimplementasikan One-to-Many dan Many-to-Many relationship
  3. Membuat migration dengan foreign key
  4. Menggunakan Eloquent relationship untuk query data
  5. Menampilkan data dengan relationship di view

langkah-langkah

Silakan install kembali laravel terlebih dahulu, karena kita tidak akan menggunakan project sebelumnya.

Pertama-tama kita akan melakukan migrasi tabel. Setelah memastikan database dapat terhubung pada project laravel baru, buka terminal/CMD project kemudian ketikkan perintah berikut.

Database Structure

Setelah itu lakukan pengeditan kode pada file major_table seperti berikut:

Database Structure

Selanjutnya, kita akan melakukan tiga kali migrasi tabel, yaitu migrasi untuk tabel students, tabel subjects, dan tabel pivot student_subject. Ketiga migrasi ini diperlukan karena kita akan menerapkan relasi many-to-many antara mahasiswa dan mata kuliah. Dalam konteks ini, satu mahasiswa dapat mengambil banyak mata kuliah, dan satu mata kuliah juga bisa diambil oleh banyak mahasiswa. Untuk merepresentasikan hubungan tersebut, Laravel menggunakan tabel pivot — dalam hal ini adalah student_subject. Tabel students akan menyimpan data mahasiswa, sedangkan tabel subjects akan menyimpan data mata kuliah. Hubungan antara keduanya akan dicatat dalam tabel student_subject, yang berfungsi sebagai penghubung many-to-many. Di sisi lain, kita juga telah memiliki tabel majors yang berelasi dengan tabel students secara one-to-many, karena satu jurusan dapat memiliki banyak mahasiswa.

Database PHP Code Database PHP Code Database PHP Code

Silahkan atur kode pada tiap file migrasi yang baru saja dibuat. mulai dari student, subject, dan student subject sebagai berikut:

Config PHP Code Config PHP Code Config PHP Code

Kemudian silahkan jalankan migrasi tersebut dengan kode berikut

Config PHP Code

Setelah selesai membuat migrasi, langkah berikutnya adalah membuat model yang merepresentasikan setiap tabel, lengkap dengan relasi antar tabel menggunakan fitur Eloquent Relationship dari Laravel. Pada tahap ini, kita akan membuat tiga buah model, yaitu Major, Student, dan Subject. Model Major memiliki relasi one-to-many dengan model Student, karena satu jurusan dapat memiliki banyak mahasiswa. Oleh karena itu, pada model Major, kita akan menambahkan method students() untuk mendefinisikan relasi tersebut. Selanjutnya, model Student akan memiliki dua jenis relasi. Pertama, relasi many-to-one ke model Major, karena setiap mahasiswa hanya memiliki satu jurusan. Kedua, relasi many-to-many ke model Subject, karena mahasiswa dapat mengambil banyak mata kuliah. Untuk relasi many-to-many ini, kita akan menggunakan method belongsToMany(). Model Subject juga akan memiliki relasi many-to-many ke model Student, karena satu mata kuliah dapat diambil oleh banyak mahasiswa. Dengan menambahkan method students() pada model Subject, kita dapat mengakses seluruh mahasiswa yang mengambil mata kuliah tersebut.

Config PHP Code Config PHP Code Config PHP Code

Silahkan atur kode pada tiap file model yang baru saja dibuat. mulai dari major, student,dan subject sebagai berikut:

Config PHP Code Config PHP Code Config PHP Code

Setelah selesai membuat model beserta relasi antar modelnya, langkah berikutnya adalah membuat seeder untuk mengisi tabel-tabel dengan data awal. Pertama, kita akan membuat seeder untuk tabel majors yang berisi beberapa nama jurusan, seperti Teknik Informatika, Sistem Informasi, dan sebagainya. Kemudian, kita lanjutkan dengan seeder untuk tabel subjects, yang akan memuat daftar mata kuliah seperti Pemrograman Web, Basis Data, atau Jaringan Komputer. Selanjutnya, kita buat seeder untuk tabel students, lengkap dengan data NIM, nama mahasiswa, alamat, serta ID jurusan. Karena mahasiswa memiliki relasi many-to-many dengan mata kuliah, kita juga perlu menyisipkan data ke dalam tabel pivot student_subject. Biasanya, ini dilakukan dengan memanggil method attach() pada relasi subjects() milik model Student. Terakhir, kita perlu mengupdate file DatabaseSeeder.php agar semua seeder tersebut dijalankan ketika kita menjalankan perintah php artisan db:seed.

Alert PHP Code Alert PHP Code Alert PHP Code

Silahkan atur kode pada tiap file seeder yang baru saja dibuat. mulai dari major, student, subject, dan databaseseeder sebagai berikut:

Mahasiswa Class Part 1 Mahasiswa Class Part 1 Mahasiswa Class Part 1 Mahasiswa Class Part 1

Selanjutnya jalankan perintah php artisan db:seed agar semua seeder sebelumnya dijalankan dan tersedia didalam database

Mahasiswa Class Part 2

Langkah selanjutnya adalah membuat controller yang bertugas mengatur alur data antara model dan view. Dalam hal ini, kita akan membuat StudentController yang akan menangani semua aktivitas terkait data mahasiswa, seperti menampilkan daftar mahasiswa, menambahkan data baru, mengedit, menghapus, serta menampilkan detail mahasiswa. Controller ini akan memanfaatkan Eloquent Relationship untuk mengambil data mahasiswa beserta jurusannya (relasi one-to-many), serta daftar mata kuliah yang diambil oleh setiap mahasiswa (relasi many-to-many). Di dalam method index(), kita akan memuat semua data mahasiswa dengan relasi jurusan dan mata kuliah menggunakan method with() agar performa query tetap efisien dan terhindar dari masalah N+1 query. Selain method index(), kita juga akan membuat method create(), store(), edit(), update(), dan destroy() untuk mendukung fitur CRUD (Create, Read, Update, Delete).

Mahasiswa Class Part 2

Kemudian silahkan sesuaikan kode dalam file StudentController tersebut seperti kode dibawah ini agar program CRYD dapat berjalan dengan semestinya

Mahasiswa Class Part 3

Setelah controller selesai dibuat, langkah berikutnya adalah mendaftarkan routes agar aplikasi kita tahu URL mana yang harus diarahkan ke fungsi-fungsi di controller. Pada file web.php yang berada di folder routes, silahkan sesuaikan dengan kode berikut:

Mahasiswa Class Part 3

langkah berikutnya adalah membuat views agar pengguna dapat berinteraksi dengan aplikasi secara visual. Pertama, kita buat layout utama yang akan menjadi kerangka dasar dari semua tampilan halaman. File ini disimpan di resources/views/layouts/app.blade.php. Yang mana berarti kita akan membuat folder baru bernama layouts di folder views. Lalu pada file app.blade.php silahkan isika dengan kode berikut

Mahasiswa Class Part 3

Kedua, kita buat tampilan untuk halaman daftar mahasiswa (index). File ini disimpan di resources/views/students/index.blade.php, dan berfungsi untuk menampilkan seluruh data mahasiswa dalam bentuk tabel. Di halaman ini juga terdapat tombol untuk menambah, mengedit, dan menghapus data. Silahkan buat lagi folder baru bernama students, lalu pada file index.blade.php silahkan isikan dengan kode berikut:

Mahasiswa Class Part 3

Ketiga, kita buat halaman form tambah mahasiswa yang disimpan di resources/views/students/create.blade.php. Di halaman ini, pengguna dapat mengisi data mahasiswa baru, memilih jurusan dari dropdown, dan mencentang mata kuliah yang diambil menggunakan checkbox. Silahkan tambahkanfile create.blade.php pada folder stundets dan isikan dengam kode berikut:

Mahasiswa Class Part 3

Apabila seluruh kode yang telah dibuat dan dijelaskan di atas sudah ditulis dengan benar, maka ketika aplikasi dijalankan, akan menghasilkan output yang sesuai dengan harapan. Halaman daftar mahasiswa akan menampilkan seluruh data mahasiswa lengkap dengan informasi jurusan dan mata kuliah yang diambil. Selain itu, akan ditampilkan pula jurusan yang memiliki jumlah mahasiswa terbanyak, serta informasi detail tentang mata kuliah yang diambil oleh mahasiswa tertentu, dan juga total SKS yang diambil oleh masing-masing mahasiswa. Seperti pada gambar berikut

Mahasiswa Class Part 3

Dalam modul ini, mahasiswa telah mempelajari beberapa konsep penting dalam pengembangan aplikasi berbasis Laravel, khususnya dalam hal pengelolaan data yang saling berelasi. Mahasiswa telah memahami cara membuat relasi One-to-Many dan Many-to-Many, bagaimana cara mengimplementasikan foreign key serta pivot table, serta menggunakan Eloquent relationship untuk melakukan query data yang lebih efisien. Selain itu, juga telah dipelajari best practices dalam menggunakan eager loading untuk menghindari masalah N+1 Query, dan cara menampilkan data relasi tersebut di tampilan (view). Relationship merupakan konsep fundamental dalam pengembangan aplikasi web berbasis database. Dengan memahami dan mengimplementasikan relasi antar tabel dengan baik, aplikasi yang dibangun akan menjadi lebih efisien, terstruktur, dan mudah untuk dikembangkan serta dipelihara ke depannya.