Laporan Praktikum 8
Pemrograman Web

Pendahuluan

Pada praktikum ini dibuat aplikasi sederhana menggunakan Laravel dengan fokus pada konsep relationship antar tabel. Studi kasus yang digunakan adalah sistem akademik yang terdiri dari mahasiswa, jurusan, dan mata kuliah. Praktikum ini membahas pembuatan migration, model, seeder, controller, route, view, serta query relationship seperti one-to-many dan many-to-many.


Tujuan Praktikum

  • Memahami konsep relationship dalam Laravel
  • Mengimplementasikan one-to-many dan many-to-many relationship
  • Membuat migration dengan foreign key dan pivot table
  • Menggunakan Eloquent relationship untuk mengambil data
  • Menampilkan data relationship pada view Blade
  • Mengerjakan latihan query relationship sesuai modul

Alat dan Bahan

  • XAMPP
  • Visual Studio Code
  • Laravel
  • Composer
  • Git / GitHub
  • Browser

Langkah-Langkah Praktikum

1. Memahami Struktur Database dan Relationship

Pada modul ini terdapat tiga tabel utama yaitu majors, students, dan subjects. Hubungan antar tabel adalah sebagai berikut:

  • Student belongs to Major (Many-to-One)
  • Major has many Student (One-to-Many)
  • Student belongs to many Subject through pivot table (Many-to-Many)
  • Subject belongs to many Student through pivot table (Many-to-Many)

ERD menunjukkan bahwa jurusan berhubungan dengan banyak mahasiswa, sedangkan mahasiswa dan mata kuliah terhubung melalui tabel pivot student_subject.


2. Membuat Migration

Migration dibuat untuk tabel majors, students, subjects, dan student_subject. Tabel students memiliki foreign key major_id, sedangkan tabel pivot menyimpan student_id dan subject_id.

migration majors migration students Setelah migration selesai dibuat, perintah berikut dijalankan untuk membentuk tabel pada database.

migration subjects

Pada tabel students digunakan foreign key dengan onDelete('cascade') agar data mahasiswa ikut terhapus ketika jurusan terkait dihapus.


3. Membuat Model dan Relationship

Tiga model dibuat untuk merepresentasikan tabel database, yaitu Major, Student, dan Subject.

Model Subjects

Model Major menggunakan hasMany(Student::class) karena satu jurusan memiliki banyak mahasiswa.

public function students()
{
    return $this->hasMany(Student::class);
}

Model Student menggunakan belongsTo(Major::class) untuk jurusan dan belongsToMany(Subject::class) untuk mata kuliah.

public function major()
{
    return $this->belongsTo(Major::class);
}

public function subjects()
{
    return $this->belongsToMany(Subject::class);
}

Model Subject menggunakan belongsToMany(Student::class) karena satu mata kuliah bisa diambil oleh banyak mahasiswa.

public function students()
{
    return $this->belongsToMany(Student::class);
}

4. Membuat Seeder

Seeder digunakan untuk mengisi data awal jurusan, mata kuliah, dan mahasiswa. Pada StudentSeeder, setiap mahasiswa diberi mata kuliah secara acak menggunakan relasi many-to-many.

Seeder Subjects

Seluruh seeder dijalankan melalui DatabaseSeeder agar data awal langsung masuk ke database.

migration subjects

Pada bagian ini penting untuk memastikan data pivot tabel juga terbentuk, karena relasi mahasiswa dan mata kuliah bergantung pada attach() di seeder.


5. Membuat Controller

Controller berfungsi untuk mengatur logika aplikasi. Pada praktikum ini digunakan StudentController untuk menampilkan data, menyimpan data, mengubah data, dan menghapus data mahasiswa.

Method index() menggunakan eager loading agar data jurusan dan mata kuliah diambil sekaligus dan menghindari N+1 problem.

$students = Student::with(['major', 'subjects'])->get();

Pada method store() digunakan attach() untuk memasukkan data ke pivot table. Pada method update() digunakan sync() agar relasi mata kuliah lama diganti dengan yang baru. Pada method destroy() digunakan detach() sebelum data mahasiswa dihapus.


6. Membuat Route

Route resource digunakan untuk menghubungkan URL dengan method controller secara otomatis.

Route Students

Route ini menghasilkan halaman index, create, store, show, edit, update, dan destroy untuk data mahasiswa.


7. Membuat View

View dibuat menggunakan Blade Template untuk menampilkan data mahasiswa, jurusan, mata kuliah, dan total SKS. Layout utama menggunakan Bootstrap agar tampilan lebih rapi dan responsif.

Pada halaman index mahasiswa ditampilkan data NIM, nama, jurusan, daftar mata kuliah, total SKS, dan aksi CRUD.

Contoh penggunaan relationship pada view:

{{ '$student->major->name' }}
{{ '$student->subjects->sum("sks")' }}

8. Hasil ketika dijalankan

Setelah migration, seeder, controller, route, dan view selesai dibuat, aplikasi dapat dijalankan menggunakan perintah php artisan serve. Saat halaman mahasiswa dibuka, sistem menampilkan data mahasiswa beserta jurusan, mata kuliah, dan total SKS yang diambil.

php artisan serve

Hasil ini membuktikan bahwa relasi one-to-many dan many-to-many berhasil diterapkan pada Laravel.


9. Latihan 1: Menampilkan semua mahasiswa beserta jurusan dan mata kuliahnya

Pada latihan ini digunakan eager loading di controller dan relationship di view untuk menampilkan semua mahasiswa, jurusan masing-masing, serta mata kuliah yang diambil.

latihan 1

Di view, jurusan ditampilkan dengan $student->major->name dan mata kuliah ditampilkan dengan loop @foreach($student->subjects as $subject).

Output Latihan 1

10. Latihan 2: Menampilkan jurusan yang memiliki mahasiswa terbanyak

Latihan ini menggunakan withCount('students') untuk menghitung jumlah mahasiswa pada setiap jurusan. Hasilnya diurutkan dari jumlah terbesar ke terkecil.

major relationship

Hasil query ini menampilkan nama jurusan dan jumlah mahasiswa yang dimiliki setiap jurusan.

output latihan 1
11. Latihan 3: Menampilkan mata kuliah yang diambil mahasiswa tertentu

Pada latihan ini data mahasiswa diambil berdasarkan id dengan findOrFail(), lalu relationship subjects ditampilkan.

Student::with('subjects')->findOrFail($id);

View kemudian menampilkan daftar mata kuliah beserta SKS-nya untuk mahasiswa tersebut.


12. Latihan 4: Menampilkan total SKS setiap mahasiswa

Total SKS dihitung dari collection mata kuliah milik mahasiswa menggunakan fungsi sum('sks').

{{ '$student->subjects->sum("sks")' }}

Nilai total SKS ini ditampilkan pada tabel daftar mahasiswa di halaman index sesuai angka mereka.

total SKS
13. Hasil Pengujian dan Kendala

Pengujian dilakukan dengan memastikan data dari seeder muncul pada halaman mahasiswa, jurusan tampil dengan benar, mata kuliah terhubung melalui pivot table, dan total SKS dapat dihitung sesuai data yang ada.

Kendala yang umum terjadi adalah relasi belum benar, pivot table belum terisi, atau nama method relationship tidak sesuai. Karena itu, penulisan nama tabel, foreign key, dan method model harus konsisten.


Kesimpulan

Praktikum ini memberikan pemahaman tentang relationship dalam Laravel, khususnya one-to-many dan many-to-many. Melalui pembuatan migration, model, seeder, controller, route, dan view, aplikasi akademik sederhana berhasil dibangun. Latihan yang diberikan membantu memahami cara mengambil data relasi, menghitung jumlah data relasi, dan menampilkan data dengan eager loading agar aplikasi lebih efisien.

Lihat Repository GitHub