Pemrograman Web

Laporan Praktikum 3

Student, Major, dan Subject

A

Pendahuluan

Praktikum ini membahas konsep Relationship dalam framework Laravel, khususnya one-to-many dan many-to-many, studi kasus yang digunakan adalah sistem akademik sederhana yang terdiri dari student, major, dan subject.

Melalui praktikum ini, mahasiswa diharapkan dapat memahami konsep relasi antar tabel, penggunaan foreign key, pivot table, serta penerapan eloquent relationship dalam pengelolaan data berbasis web.

B

Tujuan

Konsep Relationship

Mampu memahami konsep relationship dalam Laravel dan membedakan jenis-jenisnya, terutama One-to-Many dan Many-to-Many.

Migration & Foreign Key

Mampu membuat migration dengan foreign key dan pivot table untuk mendukung relasi antar tabel.

Eloquent Relationship

Mampu mengimplementasikan method relatinship pada model seperti hasMany(), belongsTo(), dan belongsToMany().

View dengan Relasi

Mampu menampilkan data dari beberapa tabel yang berelasi menggunakan Blade Template dengan bantuan Eloquent Relationship di Laravel.

C

Alat dan Tools yang Digunakan

Laptop
XAMPP
VS Code
Composer
GIT
Node JS
NPM
D

Langkah Kerja

1. Struktur Database

Sistem akademik ini memiliki empat tabel: majors, students, subjects, dan tabel pivot student_subject. Berikut adalah relasi antar entitas.

Relasi yang digunakan:
  • MajorStudent : One-to-Many (satu jurusan memiliki banyak mahasiswa).
  • StudentMajor : Many-to-One (banyak mahasiswa memilih satu jurusan).
  • StudentSubject : Many-to-Many (satu mahasiswa mengambil banyak mata kuliah, dan satu mata kuliah diambil banyak mahasiswa, dan dihubungkan melalui tabel pivot).

Lakukan konfigurasi database pada file .env sebagai berikut.

database
2. Migration
  1. Migration Tabel majors

    Jalankan perintah php artisan make:migration create_majors_table lalu isi kolom tabel dengan id dan name seperti berikut.

    major migration
  2. Migration Tabel students

    Jalankan perintah php artisan make:migration create_students_table lalu isi kolom tabel dengan id, nim, name, address, dan foreignId seperti berikut.

    students migration
  3. Migration Tabel subjects

    Jalankan perintah php artisan make:migration create_subjects_table lalu isi kolom tabel dengan id, name, dan sks seperti berikut.

    subjects migration
  4. Migration Tabel Pivot student_subject

    Jalankan perintah php artisan make:migration create_student_subject_code lalu isi kolom tabel dengan foreign key dari tabel subjects dan students seperti berikut.

    pivot table migration
Jalankan perintah php artisan migrate untuk mengeksekusi file migration yang telah dibuat sebelumnya.
3. Model
  1. Model Major

    Jalankan perintah php artisan make:model Major . Tambahkan method students() yang menggunakan hasMany(Student::class) untuk menyatakan bahwa satu jurusan memiliki banyak mahasiswa.

    model major
  2. Model Student

    Jalankan perintah php artisan make:model Student . Model ini memiliki dua relationship: belongsTo(Major::class) untuk relasi ke jurusan, dan belongsToMany(Subject::class) untuk relasi Many-to-Many dengan mata kuliah.

    model student
  3. Model Subject

    Jalankan perintah php artisan make:model Subject . Tambahkan method students() dengan belongsToMany() sebagai relasi Many-to-Many dengan mahasiswa.

    model subject
4. Seeding
  1. Seeder untuk Major

    Jalankan perintah php artisan make:seeder MajorSeeder . Tambahkan 4 data jurusan: Teknik Informatika, Sistem Informasi, Teknik Komputer, dan Manajemen Informatika.

    seeder major
  2. Seeder untuk Subject

    Jalankan perintah php artisan make:seeder SubjectSeeder. Tambahkan 5 mata kuliah lengkap dengan sks-nya.

    seeder subject
  3. Seeder untuk Student

    Jalankan perintah php artisan make:seeder StudentSeeder. Tambahkan 5 data dummy identitas mahasiswa.

    seeder student
  4. Update DatabaseSeeder

    Buka file DatabaseSeeder.php. Update file untuk memanggil beberapa seeder sekaligus sehingga data awal pada tabel major, student, dan subject dapat dimasukkan ke dalam database.

    update database seeder
Jalankan perintah php artisan db:seed untuk menjalankan seeder dan mengisi data awal ke dalam database secara otomatis.
5. Controller

Jalankan perintah php artisan make:controller StudentController untuk membuat StudentController. Tambahkan fungsi di dalamnya seperti berikut.

student controller
6. Routing

Buat routing dalam file web.php seperti berikut.

routing
7. Views

Buat folder resources/views/students dan file resources/views/layouts/app.blade.php.

  1. Layout Utama (app.blade.php)

    Berisi struktur dasar HTML yang digunakan sebagai layout utama dan kerangka dasar halaman web untuk bagian navbar, struktur HTML, dan elemen umum agar tidak perlu ditulis berulang kali.

    app.blade.php
  2. Index (index.blade.php)

    Halaman yang menampilkan daftar seluruh mahasiswa dalam bentuk tabel lengkap dengan mata kuliah yang diambil. Tombol aksi ditambahkan untuk melakukan perubahan pada data mahasiswa.

    index.blade.php
  3. Create (create.blade.php)

    Halaman yang digunakan sebagai tempat menambah data mahasiswa baru beserta identitas mata kuliah dan jurusannya.

    index.blade.php
8. Running

Jalankan php artisan serve untuk melihat tampilan akhir dari project. Buka URL http://127.0.0.1:8000/students, tampilan akan terlihat seperti berikut.

output url/students

Klik tombol Detail untuk menampilkan data lengkap mahasiswa seperti berikut.

tombol detail

Tombol Edit akan menampilkan form untuk memperbarui data mahasiswa yang sudah ada.

tombol edit

Data dapat dihapus dengan mengklik tombol Delete. Akan muncul pesan bahwa data berhasil dihapus seperti berikut.

tombol delete
E

Tugas

Implementasi Query Database untuk Menampilkan Laporan Statistik Akademik

1
Buat Report Controller

Buat controller baru menggunakan perintah php artisan make:controller ReportController. File baru akan berada pada folder App\Http\Controllers\ReportController.php.

2
Buat Routing untuk ReportController

Buka file web.php kemudian tambahkan baris perintah berikut untuk mengatur routing.

routing
3
Isi Controller

Buka file ReportController.php lalu isi dengan query berikut.

  1. Semua mahasiswa beserta jurusan dan mata kuliahnya

    $students = Student::with('major', 'subjects')->get();
  2. Jurusan yang memiliki mahasiswa terbanyak

    $majors = Major::withCount('students')->get(); $maxStudents = $majors->max('students_count'); $topMajors = $majors->where('students_count', $maxStudents);
  3. Mata kuliah yang diambil oleh mahasiswa tertentu

    $subjects = Subject::with('students')->get();
  4. Total SKS yang diambil setiap mahasiswa

    $totalSKS = Student::with('subjects')->get();

Isi file controller akan menjadi seperti berikut setelah diisi query.

file controller
4
Buat Index

Pada resources/views, tambahkan folder baru yaitu reports lalu buat file baru di dalamnya dengan nama index.blade.php.

5
Isi Index
  1. Tampilkan tabel data mahasiswa beserta jurusan dan mata kuliahnya seperti berikut.

    data mahasiswa
  2. Tampilkan statistik jurusan dengan mahasiswa terbanyak seperti berikut.

    jurusan dengan mahasiswa terbanyak
  3. Tampilkan data mata kuliah dan mahasiswa yang mengambil dalam tabel seperti berikut.

    mata kuliah dan mahasiswa yang mengambil
  4. Tampilkan data total SKS yang diambil oleh tiap mahasiswa dalam tabel berikut.

    total SKS tiap mahasiswa
6
Running

Jalankan perintah php artisan serve lalu buka URL http://127.0.0.1:8000/reports. Tiap data statistik ditampilkan dalam card untuk masing-masing datanya.

  1. Data semua mahasiswa beserta jurusan dan mata kuliahnya

    UI data mahasiswa
  2. Jurusan dengan mahasiswa terbanyak

    UI jurusan dengan mahasiswa terbanyak
  3. Mata kuliah dan mahasiswa yang mengambil

    UI mata kuliah dan mahasiswa yang mengambil
  4. Total SKS yang diambil oleh tiap mahasiswa

    UI total SKS tiap mahasiswa
F

Kesimpulan

Dari praktikum yang telah dilakukan, telah dipelajari dan dipraktikkan konsep Relationship dalam Laravel sebagai konsep fundamental dalam pengembangan aplikasi web dengan database.

MethodJenis RelasiFungsi
hasMany One-to-Many Satu data memiliki banyak data lain (Major → Student)
belongsTo Many-to-One Banyak data milik 1 data (Student → Major)
belongsToMany Many-to-Many Relasi dua arah dengan tabel pivot (Student ↔ Subject)
with() Eager Loading Mengambil data beserta relasinya dalam satu query untuk mengurangi jumlah query ke database.
sum('column') Aggregate Menjumlahkan nilai dari suatu kolom tertentu
G

Repository Github

Kode project dapat diakses melalui repository Github berikut.

Buka Github