Tugas
1. Query untuk menampilkan Jurusan dengan mahasiswa terbanyak
pertama, ubah dulu bagian index() pada StudentController dengan kode berikut:
// Eager loading untuk menghindari N+1 problem
$students = Student::with(['major', 'subjects'])->get();
// Cari jurusan dengan jumlah mahasiswa terbanyak
$mostFrequentMajor = Major::withCount('students')
->orderByDesc('students_count')
->first();
// Kirim ke view
return view('students.index', compact('students', 'mostFrequentMajor'));
Query ini berfungsi untuk mencari dan mengambil satu data jurusan (Major) yang memiliki jumlah mahasiswa terbanyak. Langkah pertamanya (Major::withCount(‘students’)) adalah mengambil semua data jurusan sambil menghitung jumlah mahasiswa yang berelasi dengan setiap jurusan, hasil hitungan ini disimpan dalam kolom virtual bernama students_count; kemudian (orderByDesc(‘students_count’)) hasilnya diurutkan secara menurun berdasarkan jumlah mahasiswa tersebut; dan terakhir (first()) diambil satu record pertama dari hasil pengurutan, yang secara efektif adalah jurusan dengan jumlah mahasiswa terbanyak.
Kemudian, pada index.blade.php, tambahkan kode berikut dibawah kode tabel:
@if ($mostFrequentMajor)
<div class="alert alert-info mt-4" role="alert">
Jurusan dengan mahasiswa terbanyak adalah: <strong>{{ $mostFrequentMajor->name }}</strong> (dengan {{ $mostFrequentMajor->students_count }} mahasiswa).
</div>
@endif
Hasilnya akan menjadi seperti berikut:

2. Menambahkan View Detail menggunakan controller show()
Kode view show.blade.php:
@extends('layouts.app')
@section('content')
<h2>Detail Mahasiswa</h2>
<div class="card">
<div class="card-body">
<div class="mb-3">
<label for="nim" class="form-label">NIM:</label>
<p id="nim">{{ $student->nim }}</p>
</div>
<div class="mb-3">
<label for="name" class="form-label">Nama:</label>
<p id="name">{{ $student->name }}</p>
</div>
<div class="mb-3">
<label for="address" class="form-label">Alamat:</label>
<p id="address">{{ $student->address }}</p>
</div>
<div class="mb-3">
<label for="major" class="form-label">Jurusan:</label>
<p id="major">{{ $student->major->name }}</p>
</div>
<div class="mb-3">
<label class="form-label">Mata Kuliah Diambil:</label>
@if ($student->subjects->count() > 0)
<ul>
@foreach ($student->subjects as $subject)
<li>{{ $subject->name }} ({{ $subject->sks }} SKS)</li>
@endforeach
</ul>
<p><strong>Total SKS:</strong> {{ $student->subjects->sum('sks') }}</p>
@else
<p>Tidak ada mata kuliah yang diambil.</p>
@endif
</div>
<a href="{{ route('students.index') }}" class="btn btn-secondary">Kembali ke Daftar</a>
</div>
</div>
@endsection
Hasilnya akan menjadi seperti berikut:

3. Menambahkan view edit dari controller update()
Kode view edit.blade.php:
@extends('layouts.app')
@section('content')
<h2>Edit Mahasiswa</h2>
<div class="card">
<div class="card-body">
<form action="{{ route('students.update', $student->id) }}" method="POST">
@csrf
@method('PUT') {{-- Use PUT method for updates --}}
<div class="mb-3">
<label for="nim" class="form-label">NIM</label>
{{-- Populate with existing student data, or old input on validation error --}}
<input type="text" class="form-control @error('nim') is-invalid @enderror"
id="nim" name="nim" value="{{ old('nim', $student->nim) }}">
@error('nim')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label for="name" class="form-label">Nama</label>
<input type="text" class="form-control @error('name') is-invalid @enderror"
id="name" name="name" value="{{ old('name', $student->name) }}">
@error('name')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label for="address" class="form-label">Alamat</label>
<input type="text" class="form-control @error('address') is-invalid @enderror"
id="address" name="address" value="{{ old('address', $student->address) }}">
@error('address')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label for="major_id" class="form-label">Jurusan</label>
<select name="major_id" id="major_id" class="form-control @error('major_id') is-invalid @enderror" >
<option value="">Pilih Jurusan</option>
@foreach ($majors as $major)
{{-- Pre-select the current major --}}
<option value="{{ $major->id }}" {{ old('major_id', $student->major_id) == $major->id ? 'selected' : '' }}>
{{ $major->name }}
</option>
@endforeach
</select>
@error('major_id')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label class="form-label">Mata Kuliah</label>
@error('subjects')
<div class="text-danger">{{ $message }}</div>
@enderror
@foreach ($subjects as $subject)
<div class="form-check">
<input type="checkbox" class="form-check-input" name="subjects[]"
value="{{ $subject->id }}" id="subject{{ $subject->id }}"
{{-- Check if the subject is currently associated with the student --}}
{{ in_array($subject->id, old('subjects', $student->subjects->pluck('id')->toArray())) ? 'checked' : '' }}>
<label for="subject{{ $subject->id }}" class="form-check-label">
{{ $subject->name }} ({{ $subject->sks }} SKS)
</label>
</div>
@endforeach
</div>
<button type="submit" class="btn btn-primary">Update</button>
<a href="{{ route('students.index') }}" class="btn btn-secondary">Batal</a>
</form>
</div>
</div>
@endsection
Hasilnya akan menjadi seperti berikut:
