LARAVEL RELATIONSHIP #10

Hello, there! It’s me again. Nah, kali ini, saya akan membahas mengenai apa saja yang saya pelajari pada Praktikum Laravel Relationship contoh kasusnya yakni antara Student, Major, dan Subject.

So, check this out!

TUJUAN

Setelah menyelesaikan praktikum ini, mahasiswa 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

1. Buat Folder Proyek Laravel Baru di Cmder

Seperti biasa, pertama-tama kita perlu membuat folder Laravel baru, kali ini saya membuat folder dengan nama laravel-relationship di Cmder menggunakan composer.

Tunggu beberapa saat hingga penginstallan selesai dan folder sudah ada di vscode.

2. Membuat Migration

Selanjutnya, kita bisa membuat migration sebagai blueprint untuk membuat, mengubah, atau menghapus tabel dan kolom dalam database secara terstruktur menggunakan perintah artisan. Di praktikum kali ini, kita akan membuat migration untuk tabel majors (jurusan), students (mahasiswa), subjects (mata kuliah), dan student subjects (mata kuliah yang dipilih mahasiswa).

Kita dapat mengetikkan perintah berikut.

php artisan make:migration create_majors_table
php artisan make:migration create_students_table
php artisan make:migration create_subjects_table
php artisan make:migration create_student_subject_table

Jika berhasil, akan muncul tampilan seperti berikut.

Di file migration/create_majors_table, kita dapat mengetikkan kode berikut. Kode ini berfungsi untuk membuat tabel majors dengan kolom id, name, created_at, dan updated_at saat migration dijalankan. Jika migration di-rollback (membatalkan perubahan migration terakhir), maka tabel majors akan dihapus kembali.

Di file migration/create_student_table, kita dapat mengetikkan kode berikut. Kode ini berfungsi untuk membuat tabel students yang menyimpan data mahasiswa seperti id, nim, name, address, dan major_id (relasi ke tabel majors). Relasi menggunakan foreign key, dan jika data jurusan (majors) dihapus, maka data mahasiswa terkait ikut dihapus karena onDelete(‘cascade’).

Di file migration/create_subject_table, kita dapat mengetikkan kode berikut. Kode ini berfungsi untuk membuat subjects di database yang menyimpan data mata kuliah, terdiri dari kolom id, name, sks, serta created_at dan updated_at.

Di file migration/create_student_subject_table, kita dapat mengetikkan kode berikut. Kode ini berfungsi untuk membuat tabel pivot student_subject yang menghubungkan banyak mahasiswa (students) dengan banyak mata kuliah (subjects) dalam relasi many-to-many.

Tabel ini menyimpan:

student_id → foreign key ke tabel students, subject_id → foreign key ke tabel subjects, dan timestamps → menyimpan waktu dibuat & diubah

Selain itu, ditambahkan juga constraint unik pada kombinasi student_id dan subject_id untuk mencegah satu mahasiswa mengambil mata kuliah yang sama lebih dari sekali.

Setelah file migrations tersebut dibuat, kita perlu menerapkan perintah php artisan migrate di terminal karena perintah tersebut berfungsi untuk mengeksekusi semua migrasi yang ada, sehingga struktur database terbentuk sesuai dengan skema yang didefinisikan dalam file migration.

3. Membuat Model dengan Relationship

Selanjutnya adalah membuat model untuk Student, Major, dan Subject dengan perintah:

php artisan make:model Student

php artisan make:model Subject

php artisan make:model Major

Ini berfungsi untuk membuat file model Student, Major, dan Subject di folder app/Models yang merepresentasikan tabel-tabel tersebut di database. Jika berhasil, maka tampilannya akan muncul seperti berikut.

Di file Models/Major, kita dapat mengetikkan kode berikut. Kode ini berfungsi untuk mewakili tabel majors di database dalam bentuk class PHP, serta mendefinisikan relasi satu ke banyak (one-to-many) antara jurusan (Major) dan mahasiswa (Student).

Di file Models/Student, kita dapat mengetikkan kode berikut. Kode ini berfungsi untuk mewakili tabel students di database, serta mengatur relasi mahasiswa dengan jurusan (majors) dan mata kuliah (subjects) menggunakan Eloquent ORM Laravel.

Di file Models/Subject, kita dapat mengetikkan kode berikut. Kode ini berfungsi untuk mewakili tabel subjects di database, sekaligus mengatur relasi many-to-many antara mata kuliah (subjects) dan mahasiswa (students) melalui Eloquent ORM di Laravel, sehingga berfungsi sebagai model Subject untuk tabel subjects, yang menyimpan data mata kuliah dan relasi banyak ke banyak dengan model Student menggunakan tabel pivot student_subject.

4. Membuat Seeders

Seeder digunakan untuk mengisi tabel database dengan data awal secara otomatis, baik untuk keperluan pengujian, pengembangan, maupun data default sistem. Kita dapat membuat seeder dengan perintah php artisan make:seeder MajorSeeder

php artisan make:seeder SubjectSeeder

php artisan make:seeder StudentSeeder

Jika berhasil, maka tampilannya akan seperti berikut.

Di file database/seeders/MajorSeeder, kita dapat mengetikkan kode berikut. Kode ini berfungsi untuk mengisi tabel majors dengan daftar jurusan awal menggunakan model Major (yakni Teknik Informatika, SI, Teknik Komputer, dan Manajemen Informatika) yang berguna untuk menyediakan data default saat pengembangan atau testing aplikasi.

Di file database/seeders/SubjectSeeder, kita dapat mengetikkan kode berikut. Kode ini berfungsi untuk menambahkan data awal ke tabel subjects, berisi nama-nama mata kuliah dan jumlah SKS, untuk keperluan testing atau pengembangan sistem akademik.

Di file database/seeders/StudentSeeder, kita dapat mengetikkan kode berikut. Kode ini berfungsi untuk mengisi tabel students dengan data awal mahasiswa, masing-masing berisi nim, name, address, dan major_id yang menghubungkan mahasiswa ke jurusannya. Selain itu, setiap mahasiswa juga secara otomatis akan dihubungkan dengan 2 hingga 4 mata kuliah secara acak melalui relasi many-to-many menggunakan tabel pivot student_subject.

Kemudian, kita dapat memperbarui kode DatabaseSeeder dengan kode berikut.

Ini bertujuan untuk mendaftarkan dan menjalankan seluruh seeder (MajorSeeder, SubjectSeeder, dan StudentSeeder) secara otomatis ketika perintah php artisan db:seed dijalankan.

Setelahnya, barulah seeders dijalankan dengan perintah php artisan.

5. Membuat Controller

Next, membuat controller. Sama seperti sebelumnya, kita dapat membuat Controller dengan php artisan make:controller StudentController yang nantinya jika berhasil akan muncul file StudentController.php di folder app/Http/Controllers, yang akan berisi logika pemrosesan permintaan (request) terkait data mahasiswa seperti menampilkan, menambahkan, mengedit, dan menghapus data.

Kode di StudentController ini berfungsi untuk mengelola seluruh logika CRUD (Create, Read, Update, Delete) data mahasiswa dalam aplikasi Laravel, termasuk pengelolaan relasi mahasiswa dengan jurusan (majors) dan mata kuliah (subjects), serta menampilkan statistik tambahan seperti jumlah SKS.

6. Perbarui Routes

Selanjutnya, kita perlu melakukan perubahan di file routes/web.php yang berfungsi untuk mengatur routing utama aplikasi agar pengguna langsung diarahkan ke daftar mahasiswa, serta mendaftarkan semua rute CRUD mahasiswa secara otomatis menggunakan controller StudentController.

7. Membuat Views

Selanjutnya, kita dapat membuat folder baru di resources/views, yakni layout dan students, mengelompokkan file tampilan (view) berdasarkan fungsinya agar struktur proyek lebih rapi dan mudah dipelihara. Folder layout menyimpan template dasar tampilan, sedangkan folder students menyimpan file tampilan khusus mahasiswa seperti daftar, tambah, edit, dan detail. Ini membuat struktur view lebih terorganisir dan mudah digunakan dalam pengembangan jangka panjang.

Setelah itu, kita dapat membuat kode di file app.blade.php seperti berikut. Kode ini berfungsi untuk membuat layout tampilan utama aplikasi manajemen mahasiswa, yang akan digunakan sebagai kerangka dasar semua halaman web melalui @extends(‘layout.app’), menyatukan struktur HTML, navbar, notifikasi session, dan tempat untuk meletakkan konten halaman tertentu dengan @yield(‘content’).

Selanjutnya, kita dapat membuat file index.blade.php seperti berikut. Kode ini berfungsi untuk menampilkan daftar seluruh mahasiswa dalam bentuk tabel, lengkap dengan informasi seperti NIM, nama, jurusan, dan mata kuliah yang diambil. Selain itu, halaman ini juga menyediakan tombol untuk menambah, mengedit, melihat detail, dan menghapus data mahasiswa.

Selanjutnya, kita dapat membuat file create.blade.php seperti berikut. Kode ini berfungsi untuk menampilkan form tambah data mahasiswa baru, lengkap dengan input NIM, nama, alamat, jurusan, dan daftar mata kuliah (subjects) yang bisa dipilih lebih dari satu. Form ini akan mengirim data ke route students.store untuk disimpan ke database.

Latihan 1: Query dengan Relationship

Buat query untuk menampilkan:

  1. Semua mahasiswa beserta jurusan dan mata kuliahnya
  2. Jurusan yang memiliki mahasiswa terbanyak
  3. Mata kuliah yang diambil oleh mahasiswa tertentu
  4. Total SKS yang diambil setiap mahasiswa

Untuk mengerjakan latihan berikut, kita perlu menambahkan file baru dalam views/students.

Selanjutnya, kita dapat menambahkan kode baris ke-12 untuk mendaftarkan route baru dengan URL /latihan yang akan menjalankan method latihan() pada StudentController, dan memberikan nama route tersebut sebagai students.latihan.

Kita dapat memperbarui kode di StudentController::index seperti berikut untuk mengambil seluruh data mahasiswa beserta relasinya (jurusan dan mata kuliah) secara efisien menggunakan eager loading, dan mengambil data jurusan disertai jumlah mahasiswanya untuk ditampilkan di view students.index.

Kita juga dapat menambahkan method baru di Controller dengan nama method latihan() yang berfungsi untuk menampilkan halaman latihan yang berisi daftar mahasiswa lengkap dengan jurusan dan mata kuliah mereka, statistik jumlah mahasiswa per jurusan, detail mahasiswa dengan ID 1 beserta mata kuliahnya, serta total jumlah SKS yang diambil oleh masing-masing mahasiswa.

Selanjutnya, file latihan.blade.php ini berfungsi untuk menampilkan berbagai hasil latihan query relasi antar tabel dalam bentuk tampilan HTML, seperti daftar mahasiswa dengan jurusan dan mata kuliah mereka, statistik jurusan dengan mahasiswa terbanyak, detail mata kuliah mahasiswa tertentu, serta total SKS yang diambil tiap mahasiswa.

Next, file show.blade.php ini berfungsi untuk menampilkan halaman detail lengkap dari seorang mahasiswa, mencakup informasi NIM, nama, alamat, jurusan, serta daftar mata kuliah yang diambil beserta jumlah SKS-nya. Tampilan ini juga menyertakan tombol “Kembali” untuk kembali ke daftar mahasiswa.

Kode edit.blade.php ini berfungsi untuk menampilkan form edit data mahasiswa, yang memungkinkan pengguna untuk memperbarui informasi seperti NIM, nama, alamat, jurusan, dan mata kuliah yang diambil. Form ini akan mengirim data ke route students.update dengan metode PUT.

Lalu, kode pada file app.blade.php dapat diperbarui seperti berikut untuk menyediakan layout utama yang responsif dan terstruktur menggunakan Bootstrap, serta menambahkan navigasi antar halaman seperti daftar mahasiswa (students.index) dan halaman latihan (students.latihan). Layout ini juga menampilkan pesan sukses dari session dan menjadi kerangka dasar tampilan semua halaman dengan @yield(‘content’).

Untuk mempercantik tampilan UI agar lebih menarik dan interaktif, index.blade.php dapat dibuat seperti berikut.

Kita dapat menjalankan kode yang sudah dibuat dengan php artisan serve untuk menjalankan server development bawaan Laravel, sehingga bisa diakses lewat browser.

Jika berhasil, maka akan muncul tampilan web seperti berikut. Di sini sudah muncul semua yang dibutuhkan, yakni informasi jurusan, nim, nama, mata kuliah yang diambil, dan jumlah SKS yang ditempuh. Juga, data bisa diedit, ditampilkan detailnya, ataupun dihapus. Terdapat juga tombol tambah mahasiswa untuk menambah data baru. Terakhir, terdapat juga statistik jurusan dengan mahasiswa terbanyak untuk menampilkan perbedaan jumlah mahasiswa antarjurusan pada data.

Sekian praktikum kali ini. Mohon berikan kritik dan saran yang membangun untuk saya. Terima kasih! ^^

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top