Oalah, siap! Berarti ini untuk **Praktikum 9**, bukan Praktikum 8. Saya sesuaikan semua teks judul, heading, nama dokumen, dan informasi di dalam laporan agar konsisten menjadi **Praktikum 9 - Laravel Relationship CRUD**. Format penamaan dan urutan ke-14 foto tetap dipertahankan menggunakan nama `9.1 (1).png` sampai `9.1 (14).png`. Berikut adalah kode HTML utuh yang sudah diperbarui: ```html
Migration, Seeding, Routing, Model, Controller, dan View Berbasis Relasi Database
Laravel merupakan framework PHP yang digunakan untuk membangun aplikasi web modern dengan konsep MVC (Model View Controller). Laravel menyediakan berbagai fitur yang mempermudah developer dalam proses pengembangan aplikasi web seperti migration, seeding, routing, model, controller, dan blade template.
Pada praktikum 9 ini dilakukan pembuatan aplikasi CRUD Mahasiswa menggunakan Laravel mulai dari konfigurasi database hingga menampilkan data relasional antartabel menggunakan view blade.
Migration digunakan untuk membuat tabel-tabel di database lewat kode PHP. Kita akan membuat 4 tabel: majors, students, subjects, dan tabel pivot student_subject.
Buka terminal di folder project Laravel Anda, lalu ketik perintah berikut:
php artisan make:migration create_majors_table
Buka file migration tersebut di text editor Anda, lalu ubah fungsinya menjadi seperti ini:
public function up(){
Schema::create('majors', function (Blueprint $table) {
$table->id(); // Primary Key
$table->string('name');
$table->timestamps(); // create_at & updated_at
});
}
Jalankan perintah di terminal:
php artisan make:migration create_students_table
Buka file migration-nya dan isi dengan kode berikut:
public function up(){
Schema::create('students', function (Blueprint $table) {
$table->id();
$table->string('nim')->unique(); // Unique Key
$table->string('name');
$table->text('address');
// Foreign Key ke tabel majors.id, jika major dihapus, student ikut terhapus
$table->foreignId('major_id')->constrained('majors')->onDelete('cascade');
$table->timestamps();
});
}
Jalankan perintah di terminal:
php artisan make:migration create_subjects_table
Buka file migration-nya dan isi dengan kode berikut:
public function up(){
Schema::create('subjects', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->integer('sks');
$table->timestamps();
});
}
Tabel ini digunakan untuk menghubungkan relasi Many-to-Many antara Student dan Subject. Jalankan perintah di terminal:
php artisan make:migration create_student_subject_table
Buka file migration-nya dan pastikan kodenya ditulis di dalam Schema::create dengan benar:
public function up(){
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();
// Mencegah duplikasi kombinasi student_id dan subject_id
$table->unique(['student_id', 'subject_id']);
});
}
Sekarang kita kirim struktur di atas ke dalam database asli. Jalankan:
php artisan migrate
Model adalah representasi tabel database di dalam kode PHP kita. Di sini kita akan mendefinisikan hubungan antar tabel tersebut.
Jalankan perintah di terminal:
php artisan make:model Major
Buka app/Models/Major.php dan sesuaikan kodenya:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Major extends Model{
use HasFactory;
protected $fillable = ['name'];
// Relasi: Satu Jurusan punya banyak Mahasiswa (One-to-Many)
public function students()
{
return $this->hasMany(Student::class);
}
}
Jalankan perintah di terminal:
php artisan make:model Student
Buka app/Models/Student.php dan ubah kodenya:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Student extends Model{
use HasFactory;
protected $fillable = ['nim', 'name', 'address', 'major_id'];
// Relasi: Banyak Mahasiswa dimiliki oleh satu Jurusan (Many-to-One / BelongsTo)
public function major()
{
return $this->belongsTo(Major::class);
}
// Relasi: Banyak Mahasiswa mengambil banyak Mata Kuliah (Many-to-Many)
public function subjects()
{
return $this->belongsToMany(Subject::class);
}
}
Jalankan perintah di terminal:
php artisan make:model Subject
Buka app/Models/Subject.php dan ganti kodenya:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Subject extends Model{
use HasFactory;
protected $fillable = ['name', 'sks'];
// Relasi: Banyak Mata Kuliah diambil oleh banyak Mahasiswa (Many-to-Many)
public function students()
{
return $this->belongsToMany(Student::class);
}
}
Seeder dipakai untuk mengisi database dengan data dummy agar kita bisa menguji aplikasinya dengan cepat.
Jalankan pembuatan seeder di terminal secara bergantian, lalu isi kodenya sesuai panduan relasi akademik.
php artisan make:seeder MajorSeeder php artisan make:seeder SubjectSeeder php artisan make:seeder StudentSeeder
Buka file induk seeder di database/seeders/DatabaseSeeder.php, panggil seeder yang sudah dibuat, lalu eksekusi pengisian data lewat terminal:
php artisan db:seed
Controller akan menjembatani antara data dari model untuk dilempar ke halaman web (View). Jalankan perintah di terminal:
php artisan make:controller StudentController
Buka app/Http/Controllers/StudentController.php dan lengkapi logika CRUD beserta fungsi sinkronisasi relasinya:
<?php
namespace App\Http\Controllers;
use App\Models\Student;
use App\Models\Major;
use App\Models\Subject;
use Illuminate\Http\Request;
class StudentController extends Controller{
public function index()
{
$students = Student::with(['major', 'subjects'])->get();
return view('students.index', compact('students'));
}
public function create()
{
$majors = Major::all();
$subjects = Subject::all();
return view('students.create', compact('majors', 'subjects'));
}
public function store(Request $request)
{
$request->validate([
'nim' => 'required|unique:students',
'name' => 'required',
'address' => 'required',
'major_id' => 'required|exists:majors,id',
'subjects' => 'required|array',
'subjects.*' => 'exists:subjects,id',
]);
$student = Student::create($request->only(['nim', 'name', 'address', 'major_id']));
$student->subjects()->attach($request->subjects);
return redirect()->route('students.index')->with('success', 'Student created successfully');
}
public function show($id)
{
$student = Student::with(['major', 'subjects'])->findOrFail($id);
return view('students.show', compact('student'));
}
public function edit($id)
{
$student = Student::with('subjects')->findOrFail($id);
$majors = Major::all();
$subjects = Subject::all();
return view('students.edit', compact('student', 'majors', 'subjects'));
}
public function update(Request $request, $id)
{
$student = Student::findOrFail($id);
$request->validate([
'nim' => 'required|unique:students,nim,' . $student->id,
'name' => 'required',
'address' => 'required',
'major_id' => 'required|exists:majors,id',
'subjects' => 'required|array',
'subjects.*' => 'exists:subjects,id',
]);
$student->update($request->only(['nim', 'name', 'address', 'major_id']));
$student->subjects()->sync($request->subjects);
return redirect()->route('students.index')->with('success', 'Student updated successfully');
}
public function destroy($id)
{
$student = Student::findOrFail($id);
$student->subjects()->detach();
$student->delete();
return redirect()->route('students.index')->with('success', 'Student deleted successfully');
}
}
Mendaftarkan resource route di file routes/web.php dan membangun sistem antarmuka berbasis blade template menggunakan framework Bootstrap 5.
Berdasarkan praktikum 9 yang telah dilakukan, aplikasi Laravel berhasil dijalankan dengan baik. Migration berhasil membuat tabel database beserta konstrain relasi kunci tamu (foreign key), seeding berhasil menambahkan data awal, routing berhasil menghubungkan URL, serta model, controller, dan view berhasil digunakan untuk mengolah data hubungan antartabel mahasiswa secara dinamis.
Berdasarkan praktikum yang telah dilakukan dapat disimpulkan bahwa Laravel mempermudah proses pengembangan aplikasi web menggunakan konsep MVC. Fitur migration, seeding, routing, model, controller, dan blade template membantu developer dalam membuat aplikasi CRUD data relasional (One-to-Many dan Many-to-Many) secara lebih terstruktur, rapi, aman, dan efisien.
Source code project Laravel CRUD dapat diakses melalui link Github berikut:
Github Project Kembali