Praktikum 8

Eloquent Relationship Laravel 12 – One To Many dan Many To Many

Dokumentasi Praktikum 8 dengan fokus pada relasi antar-tabel menggunakan Eloquent Laravel, termasuk migration, model relationship, seeder, controller, dan tampilan CRUD untuk entitas Student.

Laravel relationship structure

Ringkasan Praktikum 8

Praktikum ini membangun relasi Eloquent antara tabel Major, Student, Subject, dan pivot table student_subject untuk kebutuhan aplikasi akademik Laravel.

Relasi Eloquent

Mengimplementasikan One To Many dan Many To Many antara model Laravel.

Migration & Pivot

Membuat tabel master dan tabel pivot untuk menyimpan relasi student dengan subject.

CRUD Student

Menampilkan halaman daftar, tambah, edit, hapus, dan tampil detail mahasiswa berserta relasi.

Pendahuluan

Pada praktikum ini, tujuan utamanya adalah mempelajari bagaimana Laravel Eloquent mengelola relasi antar model. Dengan menerapkan One To Many dan Many To Many, aplikasi menjadi lebih terstruktur dan data relasional dapat diambil secara efisien.

Materi meliputi pembuatan migration untuk tabel majors, students, subjects, dan pivot table student_subject, serta pembuatan seeder untuk menyimulasikan data jurusan, mata kuliah, dan mahasiswa.

Hasil

Aplikasi Laravel mampu menyajikan data mahasiswa lengkap dengan jurusan dan daftar mata kuliah yang diikuti.

Migration

Migration membuat struktur database menjadi kode yang mudah dilacak dan diubah. Praktikum ini menggunakan migration untuk membangun tabel relasional.

Majors

Tabel majors menyimpan data jurusan.

php artisan make:migration create_majors_table
Schema::create('majors', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->timestamps();
});

Students

Tabel students menghubungkan setiap mahasiswa dengan jurusan.

php artisan make:migration create_students_table
Schema::create('students', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->string('nim')->unique();
    $table->foreignId('major_id')->constrained('majors')->onDelete('cascade');
    $table->timestamps();
});

Subjects & Pivot

Tabel subjects dan pivot student_subject menyimpan relasi Many To Many.

php artisan make:migration create_subjects_table
php artisan make:migration create_student_subject_table
Schema::create('student_subject', function (Blueprint $table) {
    $table->id();
    $table->foreignId('student_id')->constrained('students')->onDelete('cascade');
    $table->foreignId('subject_id')->constrained('subjects')->onDelete('cascade');
    $table->timestamps();
});

Menjalankan Migration

Setelah semua migration selesai ditulis, perintah berikut dieksekusi untuk membuat tabel di database.

php artisan migrate
Hasil

Tabel majors, students, subjects, dan student_subject berhasil dibuat.

Model Relationship

Relasi Eloquent menghubungkan model agar data dapat diambil secara otomatis dari tabel yang saling terkait.

One To Many

Satu jurusan memiliki banyak mahasiswa.

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

Many To Many

Mahasiswa dapat mengambil banyak mata kuliah dan mata kuliah dapat diambil banyak mahasiswa.

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

Seeder

Seeder mengisi tabel dengan data awal agar fitur relasi dan CRUD dapat diuji secara langsung.

MajorSeeder

php artisan make:seeder MajorSeeder

Membuat data jurusan awal.

DB::table('majors')->insert([
    ['name' => 'Informatika'],
    ['name' => 'Sistem Informasi'],
]);

SubjectSeeder

php artisan make:seeder SubjectSeeder

Membuat data mata kuliah dengan atribut SKS.

DB::table('subjects')->insert([
    ['name' => 'Pemrograman Web', 'sks' => 3],
    ['name' => 'Basis Data', 'sks' => 3],
    ['name' => 'Struktur Data', 'sks' => 2],
]);

StudentSeeder

php artisan make:seeder StudentSeeder

Menyisipkan mahasiswa yang otomatis berelasi dengan jurusan dan mata kuliah.

$student = Student::create([
    'name' => 'Karimah Irsyadiyah',
    'nim' => '2411533018',
    'major_id' => 1,
]);
$student->subjects()->attach([1, 2]);

Menjalankan Seeder

Seeder didaftarkan ke DatabaseSeeder.php agar data awal dapat diisi saat menjalankan perintah seeding.

$this->call(MajorSeeder::class);
$this->call(SubjectSeeder::class);
$this->call(StudentSeeder::class);
Hasil

Database memuat data jurusan, mahasiswa, dan mata kuliah dengan relasi yang siap ditampilkan.

Controller

Controller menangani logika CRUD dan memanggil model untuk mengambil data relasional.

Membuat Controller

php artisan make:controller StudentController --resource

Controller resource menyediakan method CRUD yang lengkap untuk entitas students.

Contoh Method index()

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

    return view('students.index', compact('students'));
}

Routing

Resource route digunakan untuk menghasilkan route CRUD otomatis bagi controller Student.

Route::resource('students', StudentController::class);

Route ini memetakan URI ke method index, create, store, show, edit, update, dan destroy.

Keuntungan
  • Menghemat deklarasi route
  • Standar RESTful
  • Mudah di-maintain

View

Folder view menyajikan tampilan daftar, form tambah, edit, dan detail mahasiswa dengan relasi jurusan dan mata kuliah.

Folder View

resources/views/students
- index.blade.php
- create.blade.php
- edit.blade.php
- show.blade.php

Setiap view menampilkan data mahasiswa lengkap dengan relasi Eloquent.

Contoh Tampilan

@foreach ($students as $student)
    
        {{ $student->nim }}
        {{ $student->name }}
        {{ $student->major->name }}
        {{ $student->subjects->pluck('name')->join(', ') }}
    
@endforeach

Query Relationship

Query relationship digunakan untuk memuat data relasi secara efisien dan melakukan perhitungan pada koleksi terkait.

Menampilkan relasi

Student::with(['major', 'subjects'])->get();
Major::withCount('students')->get();
Student::with('subjects')->find(1);

Menghitung SKS

$student->subjects->sum('sks');

Dengan relasi Many To Many, total SKS mahasiswa dapat dihitung langsung dari koleksi mata kuliah.

Implementasi CRUD Student

Implementasi CRUD mahasiswa menampilkan form dan tabel yang memanfaatkan data relasional untuk jurusan dan mata kuliah.

Create

Form tambah mahasiswa menyediakan pilihan jurusan dan mata kuliah.

Read

Menampilkan daftar mahasiswa lengkap dengan nama jurusan dan daftar mata kuliah.

Update & Delete

Mengubah dan menghapus data mahasiswa secara terpusat dalam halaman CRUD.

Proses CRUD

Controller menyimpan input mahasiswa, menyertakan foreign key major_id, dan mengaitkan mata kuliah pada pivot table.

public function store(Request $request)
{
    $student = Student::create($request->validate([
        'name' => 'required',
        'nim' => 'required|unique:students',
        'major_id' => 'required',
    ]));

    $student->subjects()->sync($request->subjects);

    return redirect()->route('students.index');
}
Hasil CRUD

Data mahasiswa tersimpan dengan relasi jurusan dan mata kuliah, sehingga tampilan detail dapat menunjukkan semua informasi terkait.

Kesimpulan

Praktikum 8 berhasil menunjukkan bagaimana Laravel Eloquent mempermudah pengelolaan relasi antar model. Penerapan One To Many dan Many To Many membuat data jurusan, mahasiswa, dan mata kuliah terhubung secara konsisten.

Dengan migration, seeder, resource controller, dan view Blade, aplikasi CRUD Student kini mendukung tampilan daftar mahasiswa, detail relasi, dan perhitungan total SKS.

Hasil Akhir

Aplikasi siap digunakan sebagai dokumentasi portfolio Laravel yang menampilkan kemampuan Eloquent Relationship secara lengkap.

Dokumentasi Hasil

Berikut placeholder gambar dokumentasi untuk halaman CRUD Student dan relasi database.

Screenshot halaman Students Index
Students Index
Screenshot halaman Students Create
Students Create
Screenshot halaman Students Edit
Students Edit
Screenshot halaman Students Show
Students Show
Screenshot database relations
Database Relations
Screenshot pivot table student_subject
Student Subject Pivot

Karimah Irsyadiyah

Mahasiswa Informatika, Universitas Andalas

Profil Profesional

Dokumentasi ini menampilkan kemampuan Laravel Eloquent, termasuk migration, seeder, controller resource, dan view Blade yang siap dipublikasikan sebagai portfolio.