Praktikum Pemrograman Web
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.
Persiapan Sistem:
Teori dan Langkah-Langkah:
php artisan make:migrationn create_majors_table
$table->string('name'); pada function up() di file migration majors.
php artisan make:migration create_students_table
$table->string('nim')->unique();
$table->string('name');
$table->text('address');
$table->foreignId('major_id')->constrained('majors')->onDelete('cascade');
php artisan make:migration create_subjects_table
$table->string('name');
$table->integer('sks');
php artisan make:migration create_student_subject_table
$table->foreignId('student_id')->constrained('students')->onDelete('cascade');
$table->foreignId('subject_id')->constrained('subjects')->onDelete('cascade');
$table->unique(['student_id', 'subject_id']);
php artisan migrate.
php artisan make:model Major
use HasFactory;
protected $fillable = [name];
//Relationships:One Major Has Many Students
public function students()
{
return $this->hasMany(Student::class);
}
php artisan make:model Student
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);
}
php artisan make:model Subject
use HasFactory;
protected $fillable = ['name', 'sks'];
// Relationship: Many Subjects belong to many Students
public function students()
{
return $this->belongsToMany(Student::class);
}
php artisan make:seeder MajorSeeder
$majors = [
['name' => 'Teknik Informatika'],
];
php artisan make:seeder SubjectSeeder
$subjects = [
['name' => 'Pemrograman Web', 'sks' => 3],
];
php artisan make:seeder StudentSeeder
$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);
$this->call([
MajorSeeder::class,
SubjectSeeder::class,
StudentSeeder::class,
]);
php artisan db:seed
php artisan make:controller StudentController --resource
Route::get('/', function () {
return redirect()->route('students.index');
});
Route::resource('students', StudentController::class);
Tugas Praktikum:
Buat query untuk menampilkan:
$students = Student::with(['major', 'subjects'])->get();
return view('students.index', compact('students'));
$topMajor = Major::withCount('students')->orderBy('students_count', 'desc')->first();
return view('students.index', compact(
'students',
'topMajor'
));
$student = Student::with(['major', 'subjects'])->findOrFail($id);
@foreach($student->subjects as $subject)
{{ $subject->name }}
@endforeach
$student = Student::with(['major', 'subjects'])->findOrFail($id);
{{ $student->subjects->sum('sks') }}
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 project ini dapat diakses melalui link berikut:
https://github.com/teguhsmlnna666/WebPortofolio