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.
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.
Students Index
Students Create
Students Edit
Students Show
Database Relations