LAPORAN PRAKTIKUM 10

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:

Leave a Reply

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