Eloquent ORM & Relasi Data - Perwira Learning Center

 

Latar Belakang

Sebagai lanjutan dari pembahasan mengenai database dan migration, tahap berikutnya adalah mempelajari Eloquent ORM dan relasi data dalam Laravel. Setelah struktur tabel berhasil dibuat, diperlukan cara yang efisien untuk mengelola dan mengambil data dari database tanpa harus menuliskan query SQL secara manual. Oleh karena itu, Laravel menyediakan Eloquent ORM sebagai solusi untuk mempermudah proses interaksi dengan database.

Artikel ini dibuat dengan tujuan untuk mendokumentasikan hasil pembelajaran saya mengenai penggunaan Eloquent ORM serta penerapan relasi antar tabel. Dengan memahami konsep ini, saya dapat mengelola data secara lebih terstruktur serta membangun hubungan antar entitas dalam aplikasi dengan lebih mudah.

Pengenalan Eloquent ORM

Sebelum kita masuk ke praktik, mari pahami dulu apa itu ORM. ORM (Object-Relational Mapping) adalah jembatan yang menghubungkan antara kode program berbasis objek dengan database relasional. Setiap tabel di database akan diwakili oleh sebuah model di Laravel.

Misalnya, kita punya tabel products, maka kita akan membuat model Product. Model ini nantinya akan menjadi "gerbang" utama kita untuk berinteraksi dengan tabel products. Kita bisa mengambil data, menambah data baru, mengupdate, atau menghapus data hanya dengan memanggil method-method dari model tersebut.

Kelebihan Eloquent dibanding query manual:

  • Lebih mudah dibaca - Kode kita jadi lebih bersih dan ekspresif

  • Keamanan lebih terjamin - Eloquent secara otomatis melindungi dari serangan SQL injection

  • Menghemat waktu - Tidak perlu menulis query berulang-ulang

  • Hubungan antar data lebih mudah - Relasi bisa didefinisikan sekali dan dipakai berulang kali

Contoh sederhana perbandingan:

// Menggunakan query manual
DB::select("SELECT * FROM products WHERE price > 100000");

// Menggunakan Eloquent
Product::where('price', '>', 100000)->get();

Membuat Model

Untuk membuat model di Laravel, kita bisa menggunakan perintah Artisan. Buka terminal atau command prompt, lalu jalankan:

php artisan make:model Product

Perintah ini akan membuat file baru di direktori app/Models/Product.php. Secara otomatis, Laravel akan mengasumsikan bahwa model Product terhubung dengan tabel products (nama jamak dari nama model). Ini adalah konvensi yang memudahkan, tapi kita juga bisa menentukan nama tabel sendiri jika diperlukan.

Mari kita lihat contoh model Product sederhana:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    protected $table = 'products';
    protected $primaryKey = 'id';
    protected $fillable = ['name', 'price', 'stock', 'category_id'];
}

Penjelasan kode di atas:

  • $table : menentukan nama tabel yang terhubung dengan model ini

  • $primaryKey : menentukan primary key tabel (defaultnya 'id')

  • $fillable : daftar kolom yang boleh diisi secara massal (keamanan)

Operasi Dasar Menggunakan Eloquent

Setelah model siap, kita bisa mulai berinteraksi dengan database. Biasanya operasi-operasi ini dilakukan di dalam controller. Berikut contoh-contoh dasarnya:

Mengambil Data

// Di dalam controller
use App\Models\Product;

// Ambil semua data produk
$products = Product::all();

// Ambil produk dengan harga > 100000
$expensiveProducts = Product::where('price', '>', 100000)->get();

// Ambil satu produk berdasarkan ID
$product = Product::find(1);

Menambahkan Data

// Cara 1: Menggunakan create (mass assignment)
Product::create([
    'name' => 'Laptop Gaming',
    'price' => 15000000,
    'stock' => 10
]);

// Cara 2: Membuat objek lalu save
$product = new Product();
$product->name = 'Mouse Wireless';
$product->price = 250000;
$product->stock = 50;
$product->save();

Mengupdate Data

// Cari produk lalu update
$product = Product::find(1);
$product->price = 14000000;
$product->save();

// Atau update langsung
Product::where('id', 1)->update(['stock' => 5]);

Menghapus Data

// Hapus berdasarkan ID
$product = Product::find(1);
$product->delete();

// Hapus langsung
Product::destroy(1);

Konsep Relasi Data

Dalam aplikasi nyata, data tidak pernah berdiri sendiri. Misalnya, kita punya produk dan kategori. Setiap produk pasti masuk ke dalam satu kategori, dan satu kategori bisa memiliki banyak produk. Nah, di sinilah kita butuh relasi data.

Relasi data memungkinkan kita menghubungkan antar tabel sehingga pengelolaan data jadi lebih terstruktur dan efisien. Tiga jenis relasi yang paling umum:

  • One to Many : Satu record di tabel A bisa berhubungan dengan banyak record di tabel B

  • Many to One : Kebalikan dari one to many, banyak record di tabel B dimiliki oleh satu record di tabel A

  • Many to Many : Banyak record di tabel A berhubungan dengan banyak record di tabel B

Dalam artikel ini, kita akan fokus pada one-to-many dan many-to-one karena ini adalah fondasi penting sebelum masuk ke relasi yang lebih kompleks.

Relasi One-to-Many di Eloquent

Mari kita gunakan contoh nyata: Kategori dan Produk. Satu kategori bisa memiliki banyak produk, dan satu produk hanya bisa dimiliki oleh satu kategori.

Model Kategori

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $fillable = ['name', 'description'];
    
    // Relasi one-to-many: satu kategori punya banyak produk
    public function products()
    {
        return $this->hasMany(Product::class);
    }
}

Model Product

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    protected $fillable = ['name', 'price', 'stock', 'category_id'];
    
    // Relasi many-to-one: satu produk dimiliki oleh satu kategori
    public function category()
    {
        return $this->belongsTo(Category::class);
    }
}

Penjelasan relasi:

  • hasMany() : method ini memberitahu Laravel bahwa model Category terhubung dengan model Product melalui foreign key category_id di tabel products

  • belongsTo() : method ini memberitahu Laravel bahwa model Product terhubung dengan model Category, dan setiap produk punya satu kategori

Mengakses Data Relasi

Setelah relasi didefinisikan, kita bisa mengakses data terkait dengan sangat mudah. Mari lihat contoh di controller:

Mengambil Produk Berdasarkan Kategori

use App\Models\Category;

// Ambil kategori beserta semua produknya
$category = Category::with('products')->find(1);

// Tampilkan nama kategori
echo $category->name;

// Loop untuk menampilkan produk-produk dalam kategori
foreach ($category->products as $product) {
    echo $product->name . " - Rp " . $product->price;
}

Mengambil Kategori dari Produk

use App\Models\Product;

// Ambil produk beserta kategorinya
$product = Product::with('category')->find(1);

// Tampilkan nama produk
echo $product->name;

// Tampilkan nama kategori produk
echo $product->category->name;

Method with() digunakan untuk eager loading, yaitu teknik mengambil data relasi sekaligus untuk menghindari query berulang. Ini akan mengoptimalkan performa aplikasi kita.

Hasil Pembelajaran

Melalui pembelajaran ini, saya memahami bahwa Eloquent ORM memungkinkan pengelolaan data menggunakan model berbasis object-oriented. Setiap tabel direpresentasikan sebagai model, sehingga proses seperti mengambil, menambahkan, memperbarui, dan menghapus data dapat dilakukan melalui method yang telah disediakan oleh Laravel.

Saya juga mempelajari konsep relasi data seperti one-to-one, one-to-many, dan many-to-many. Dengan mendefinisikan relasi pada model, saya dapat menghubungkan tabel yang saling berkaitan tanpa harus menulis query join secara manual. Hal ini membuat kode menjadi lebih rapi, mudah dibaca, dan terorganisir sesuai dengan prinsip MVC.

Kesimpulan

Eloquent ORM dan relasi data memberikan kemudahan dalam pengelolaan database pada Laravel. Dengan pendekatan berbasis model, interaksi dengan database menjadi lebih sederhana dan terstruktur.

Pemahaman mengenai relasi antar tabel juga membantu dalam membangun aplikasi yang memiliki struktur data kompleks secara lebih efisien. Dengan menguasai Eloquent ORM, proses pengembangan backend menjadi lebih produktif dan sesuai dengan praktik pengembangan modern.

daftar pustaka

Laravel. (n.d.). Eloquent: Getting started. Diakses pada 26 Februari 2026, dari https://laravel.com/docs/eloquent

Laravel. (n.d.). Eloquent relationships. Diakses pada 26 Februari 2026, dari https://laravel.com/docs/eloquent-relationships

Niagahoster. (2023). Mengenal Eloquent ORM pada Laravel dan cara menggunakannya. Diakses pada 26 Februari 2026, dari https://www.niagahoster.co.id/blog/eloquent-laravel/

Petani Kode. (2022). Tutorial Eloquent ORM Laravel untuk pemula. Diakses pada 26 Februari 2026, dari https://www.petanikode.com/laravel-eloquent/

Codepolitan. (2022). Belajar relasi database di Laravel. Diakses pada 26 Februari 2026, dari https://www.codepolitan.com/