Eloquent & ORM

Eloquent ORM (Object-Relational Mapping) di Laravel berfokus pada kemudahan mengelola database menggunakan pendekatan berbasis objek, di mana setiap tabel dipetakan menjadi sebuah model (class PHP) dan setiap baris datanya diwakili sebagai sebuah objek tunggal. Melalui Eloquent, aktivitas CRUD dapat dieksekusi secara sangat bersih dan intuitif menggunakan fungsi bawaan seperti Siswa::all() untuk mengambil semua data atau Siswa::latest()->paginate(10) untuk mengurutkan sekaligus membagi halaman secara otomatis. Keunggulan utamanya terletak pada efisiensi pengelolaan relasi antar-tabel yang kompleks tanpa perlu menulis query JOIN manual, serta adanya sistem proteksi otomatis terhadap ancaman SQL Injection, sehingga penulisan kode menjadi jauh lebih aman, rapi, dan profesional untuk skala proyek besar.

STUDI KASUS 1 : Lakukan hal yang sama seperti yang sudah dijelaskan pada slide sebelumnya untuk tabel t_kelas (Create, Edit dan Delete).

Tugas pada Studi Kasus 1 ini mencakup implementasi fitur CRUD (Create, Read, Update, Delete) pada tabel t_kelas menggunakan metode Facade DB di Laravel, yang berfokus pada pembuatan logika bisnis pembaruan data melalui fungsi update() serta penghapusan data secara permanen berdasarkan ID spesifik melalui fungsi destroy() di dalam SiswaController.

<<<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Models\Kelas;
class KelasController extends Controller
{
// * Menampilkan daftar semua kelas.
public function index()
{
// Eloquent: Mengambil semua data
$kelas = kelas::all();
return view('kelas.index', compact('kelas'));
}

// * Menampilkan form untuk membuat kelas baru.
public function create()
{
return view('kelas.form');
}

// * Menyimpan data kelas baru ke database.
public function store(Request $request)
{
$request->validate([
'nama_kelas' => 'required',
'jurusan' => 'required',
'lokasi_ruangan' => 'required',
'nama_wali_kelas' => 'required',
]);

Kelas::create($request->all());

return redirect()->route('kelas.index')
->with('success', 'Data kelas berhasil ditambahkan!');
}

// * Menampilkan form edit untuk data kelas tertentu.
public function edit($id)
{
$kelas = kelas::find($id);
if (!$kelas) {
return redirect()->route('kelas.index')
->with('error', 'Data kelas tidak ditemukan.');
}
return view('kelas.edit', compact('kelas'));
}

// * Memperbarui data kelas di database.
public function update(Request $request, $id)
{
$request->validate([
'nama_kelas' => 'required',
'jurusan' => 'required',
'lokasi_ruangan' => 'required',
'nama_wali_kelas' => 'required',
]);
$kelas = kelas::findOrFail($id);
$kelas->update($request->all());
return redirect()->route('kelas.index')
->with('success', 'Data kelas berhasil diubah!');
}

// * Menghapus data kelas dari database.
public function destroy($id)
{

$kelas = kelas::findOrFail($id);
$kelas->delete();
return redirect()->route('kelas.index')
->with('success', 'Data kelas berhasil dihapus!');
}
}   

Tampilan :

Struktur Tabel phpMyAdmin

STUDI KASUS 2 : Buatlah tabel baru untuk menyimpan data guru dengan field nip, nama_guru, jenis_kelamin, alamat. Buatlah migration nya, dan view untuk CRUD nya. Cobalah gunakan metode ORM untuk insert dan update data untuk tabel data guru tersebut

Tugas pada Studi Kasus 2 ini mencakup pembuatan tabel baru bernama t_guru yang memiliki field nip, nama_guru, jenis_kelamin, dan alamat melalui sistem migration Laravel, yang kemudian dilanjutkan dengan penyusunan halaman view serta implementasi fitur CRUD menggunakan metode Eloquent ORM untuk menangani proses insert (tambah) dan update (ubah) data guru secara terstruktur.

<<<<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Guru;
class GuruController extends Controller
{
// Menampilkan daftar guru
public function index()
{
$guru = Guru::all(); // Mengambil semua data dengan ORM
return view('guru.index', compact('guru'));
}
// Menampilkan form tambah guru
public function create()
{
return view('guru.form');
}
// Menyimpan data guru baru (INSERT dengan ORM)
public function store(Request $request)
{
$request->validate([
'nip' => 'required|unique:t_guru,nip',
'nama_guru' => 'required',
'jenis_kelamin' => 'required',
'alamat' => 'required',
]);
// Metode ORM untuk Insert
Guru::create($request->all());
return redirect()->route('guru.index')->with('success', 'Data Guru
berhasil ditambah!');
}
// Menampilkan form edit
public function edit($id)
{

$guru = Guru::findOrFail($id); // Mencari data dengan ORM
return view('guru.edit', compact('guru'));
}
// Memperbarui data guru (UPDATE dengan ORM)
public function update(Request $request, $id)
{
$request->validate([
'nip' => 'required|unique:t_guru,nip,'.$id,
'nama_guru' => 'required',
'jenis_kelamin' => 'required',
'alamat' => 'required',
]);
$guru = Guru::findOrFail($id);
// Metode ORM untuk Update
$guru->update($request->all());
return redirect()->route('guru.index')->with('success', 'Data Guru
berhasil diubah!');
}
// Menghapus data
public function destroy($id)
{
$guru = Guru::findOrFail($id);
$guru->delete(); // Metode ORM untuk Delete
return redirect()->route('guru.index')->with('success', 'Data Guru
berhasil dihapus!');
}
}   

Tampilan :

Struktur Tabel phpMyAdmin

Studikasus 3 : Bisakah anda menjelaskan perbedaan yang signifikan antara penggunaan DB Facades dan Eloquent?

Perbedaan paling signifikan antara DB Facades dan Eloquent terletak pada cara mereka memandang data di dalam aplikasi. DB Facades (Query Builder) berfokus pada query database secara langsung, di mana data diperlakukan sebagai baris-baris tabel yang diambil secara manual, sehingga pengembang harus menuliskan nama tabel dan mengelola aspek teknis seperti pengisian waktu (timestamps) secara mandiri. Sebaliknya, Eloquent menggunakan pendekatan Object-Relational Mapping (ORM) yang memetakan setiap tabel menjadi sebuah kelas (Model), sehingga satu baris data dianggap sebagai satu objek yang lebih mudah dimanipulasi dengan kode yang lebih ringkas dan deskriptif.

Selain masalah sintaks, Eloquent menawarkan berbagai fitur otomatisasi yang tidak dimiliki DB Facades, seperti pengelolaan keamanan melalui properti $fillable untuk mencegah mass assignment, serta kemudahan dalam mengelola hubungan antar tabel (relasi) tanpa harus menulis perintah join yang kompleks. Meskipun DB Facades memiliki sedikit keunggulan dalam kecepatan eksekusi untuk pengolahan data berskala sangat besar karena tidak memiliki beban pemrosesan objek Model, Eloquent tetap menjadi standar utama dalam pengembangan Laravel modern karena efisiensi koding, keterbacaan kode yang lebih baik, dan fitur-fitur canggih yang mendukung logika bisnis yang rumit.