Laporan Praktikum Pekan 8 - Laravel Relationship

Praktikum Pemrograman Web


Tujuan Praktikum

Memahami konsep relationship dalam Laravel, mengimplementasikan One-to-Many dan Many-to-Many relationship, membuat migration dengan foreign key, menggunakan Eloquent relationship untuk query data, dan Menampilkan data dengan relationship di view.

Langkah Kerja Praktikum

Persiapan Sistem:

Teori dan Langkah-Langkah:

  1. Buat migration untuk tabel majors menggunakan perintah berikut:
    php artisan make:migrationn create_majors_table
    Lalu, tambahkan $table->string('name'); pada function up() di file migration majors.
  2. Buat migration untuk tabel students menggunakan perintah berikut:
    php artisan make:migration create_students_table
    Lalu, tambahkan syntax berikut pada function up() di file migration students untuk menambahkan kolom:
    $table->string('nim')->unique();
    $table->string('name');
    $table->text('address');
    $table->foreignId('major_id')->constrained('majors')->onDelete('cascade');
  3. Buat migration untuk tabel subjects menggunakan perintah berikut:
    php artisan make:migration create_subjects_table
    Lalu, tambahkan syntax berikut pada function up() di file migration subjects untuk menambahkan kolom:
    $table->string('name');
    $table->integer('sks');
  4. Buat migration untuk tabel pivot antara students dan sybjects menggunakan perintah berikut:
    php artisan make:migration create_student_subject_table
    Lalu, tambahkan syntax berikut pada function up() di file migration pivot student_subject:
    $table->foreignId('student_id')->constrained('students')->onDelete('cascade');
    $table->foreignId('subject_id')->constrained('subjects')->onDelete('cascade');
    $table->unique(['student_id', 'subject_id']);
  5. Jalankan proses migration dengan perintah php artisan migrate.
  6. Buat model untuk tabel major dengan perintah berikut:
    php artisan make:model Major
    Lalu, tambahkan function berikut agar model dapat mengakses data pada tabel students:
    use HasFactory;
    protected $fillable = [name];
    //Relationships:One Major Has Many Students
    public function students()
    {
    return $this->hasMany(Student::class);
    }
  7. Buat model untuk tabel student dengan perintah berikut:
    php artisan make:model Student
    Lalu, tambahkan function berikut agar model dapat mengakses data pada tabel major dan subjects
    use HasFactory;
    protected $fillable = ['nim', 'name', 'address', 'major_id'];
    // Relationship: Many Students belong to one Major
    public function major()
    {
    return $this->belongsTo(Major::class);
    }
    // Relationship: Many Students belong to many Subjects
    public function subjects()
    {
    return $this->belongsToMany(Subject::class);
    }
  8. Buat model untuk tabel subject dengan perintah berikut:
    php artisan make:model Subject
    Lalu, tambahkan function berikut agar model dapat mengakses data pada tabel students
    use HasFactory;
    protected $fillable = ['name', 'sks'];
    // Relationship: Many Subjects belong to many Students
    public function students()
    {
    return $this->belongsToMany(Student::class);
    }
  9. Buat seeder untuk Major dengan perintah berikut:
    php artisan make:seeder MajorSeeder
    Lalu, tambahkan syntax berikut pada function run() untuk mengisi data awal ke tabel majors:
    $majors = [
    ['name' => 'Teknik Informatika'],
    ];
  10. Buat seeder untuk Subject dengan perintah berikut:
    php artisan make:seeder SubjectSeeder
    Lalu, tambahkan syntax berikut pada function run() untuk mengisi data awal ke tabel subjects:
    $subjects = [ ['name' => 'Pemrograman Web', 'sks' => 3],
    ];
  11. Buat seeder untuk Student dengan perintah berikut:
    php artisan make:seeder StudentSeeder
    Lalu, tambahkan syntax berikut pada function run() untuk mengisi data awal ke tabel students:
    $students = [ ['nim' => '20210001', 'name' => 'Ahmad Rizki', 'address' => 'Jl. Merdeka No. 1', 'major_id' => '1'],
    ];
    // assign random subjects to each student
    $subjects = Subject::inRandomOrder()->take(rand(2, 4))->pluck('id');
    $student->subjects()->attach($subjects);
  12. Tambahkan syntax berikut pada function run() di DatabaseSeeder untuk menjalankan semua seeder yang sudah dibuat:
    $this->call([
    MajorSeeder::class,
    SubjectSeeder::class,
    StudentSeeder::class,
    ]);

    Lalu, jalankan proses seeding dengan perintah php artisan db:seed
  13. Buat controller untuk Student dengan perintah php artisan make:controller StudentController --resource
    Tambahkan beberapa fungsi operasi CRUD pada StudentController untuk mengelola data mahasiswa, yaitu:
    • index() untuk menampilkan daftar mahasiswa
    • show() untuk menampilkan detail mahasiswa
    • create() untuk menampilkan form pembuatan mahasiswa baru
    • store() untuk menyimpan data mahasiswa baru
    • edit() untuk menampilkan form pengeditan mahasiswa
    • update() untuk memperbarui data mahasiswa
    • destroy() untuk menghapus data mahasiswa
  14. Tambahkan route untuk StudentController pada web.php dengan syntax berikut:
    Route::get('/', function () {
    return redirect()->route('students.index');
    });
    Route::resource('students', StudentController::class);
  15. Buat view yang akan menampilkan data mahasiswa menggnakan Blade Template, modifikasi layout pada file app.blade.php
  16. Buat view untuk menampilkan daftar mahasiswa dengan nama index.blade.php dan form untuk membuat data mahasiswa dengan nama create.blade.php
  17. Output Aplikasi:
    LaporanTiga-1 LaporanTiga-2 LaporanTiga-3

Tugas Praktikum:
Buat query untuk menampilkan:

Penyelesaian Tugas Praktikum:

  1. Buat query untuk menampilkan semua mahasiswa beserta jurusan dan mata kuliahnya.
    $students = Student::with(['major', 'subjects'])->get();
    return view('students.index', compact('students'));

    LaporanTiga-1
  2. Buat query untuk menampilkan jurusan yang memiliki mahasiswa terbanyak.
    $topMajor = Major::withCount('students')->orderBy('students_count', 'desc')->first();
    return view('students.index', compact(
    'students',
    'topMajor'
    ));

    LaporanTiga-4
  3. Buat query untuk menampilkan mata kuliah yang diambil oleh mahasiswa tertentu.
    $student = Student::with(['major', 'subjects'])->findOrFail($id);
    @foreach($student->subjects as $subject)
    {{ $subject->name }}
    @endforeach

    LaporanTiga-5
  4. Buat query untuk menampilkan total SKS yang diambil setiap mahasiswa.
    $student = Student::with(['major', 'subjects'])->findOrFail($id);
    {{ $student->subjects->sum('sks') }}

    LaporanTiga-6

Kesimpulan

Dari praktikum ini kita telah mempelajari bahwa, Relationship adalah konsep fundamental dalam pengembangan aplikasi web dengan database. Pada praktikum ini, kita mengetahui cara membuat relationship One-to-Many dan Many-to-Many di Laravel, implementasi foreign key dan pivot table, penggunaan Eloquent relationship untuk query data, penggunaan eager loading, dan cara menampilkan data relationship di view. Dengan penggunaan relationship akan membantu kita dalam membangun aplikasi yang efisien dan mudah dimaintainance nantinya.

Repository Github

Repository project ini dapat diakses melalui link berikut:
https://github.com/teguhsmlnna666/WebPortofolio