← Kembali ke tutorial
Laravel Pemula

Model & Eloquent ORM Dasar di Laravel 13

31 October 2026 2 kali dibaca

Bagikan: Link disalin!
Model & Eloquent ORM Dasar di Laravel 13

Halo bos! Selamat datang di Artikel 7 Belajar Laravel 13.

Di Artikel 6 kita sudah berhasil membuat tabel categories dan posts lewat Migration. Sekarang kita akan belajar cara berinteraksi dengan tabel tersebut menggunakan Eloquent ORM.

Eloquent adalah salah satu fitur paling powerful di Laravel. Dengan Eloquent, kita tidak perlu menulis query SQL mentah. Kita cukup menggunakan Model.

Apa Itu Model & Eloquent?

  1. Model = representasi satu tabel di database.
  2. Eloquent = sistem yang membuat kita bisa berinteraksi dengan database menggunakan cara yang sangat mirip dengan object biasa di PHP.

Contohnya:

  1. Tabel posts → Model Post
  2. Tabel categories → Model Category

Dengan Model, kita bisa dengan mudah:

  1. Mengambil data
  2. Menyimpan data baru
  3. Mengubah data
  4. Menghapus data
  5. Mengatur relasi antar tabel

Langkah 1: Membuat Model Category dan Post

Jalankan kedua perintah ini di terminal:

php artisan make:model Category
php artisan make:model Post

Laravel akan membuat dua file:

app/Models/Category.php
app/Models/Post.php

Langkah 2: Mengisi Model Category

Buka file app/Models/Category.php, lalu ganti isinya menjadi:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;

class Category extends Model
{
// Kolom yang boleh diisi secara massal (mass assignment)
protected $fillable = [
'name',
'slug',
'description',
];

/**
* Satu kategori bisa memiliki banyak post.
*/
public function posts(): HasMany
{
return $this->hasMany(Post::class);
}
}

Penjelasan singkat:

  1. $fillable → daftar kolom yang boleh diisi sekaligus (penting untuk keamanan)
  2. Method posts() → mendefinisikan relasi hasMany (satu kategori punya banyak post)

Langkah 3: Mengisi Model Post

Buka file app/Models/Post.php, lalu ganti isinya menjadi:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Post extends Model
{
protected $fillable = [
'category_id',
'title',
'slug',
'excerpt',
'body',
'thumbnail',
'published_at',
];

/**
* Setiap post dimiliki oleh satu kategori.
*/
public function category(): BelongsTo
{
return $this->belongsTo(Category::class);
}
}

Penjelasan:

  1. Method category() → relasi belongsTo (setiap post milik satu kategori)

Langkah 4: Memahami Mass Assignment

Laravel secara default melindungi model dari pengisian massal yang berbahaya (Mass Assignment Protection).

Itulah kenapa kita wajib mendefinisikan $fillable.

Kalau kita tidak menuliskan kolom di $fillable, maka kolom tersebut tidak akan bisa diisi lewat method create() atau update().

Catatan Laravel 13:
Sekarang Laravel juga mendukung cara baru memakai PHP Attribute:
use Illuminate\Database\Eloquent\Attributes\Fillable;

#[Fillable(['name', 'slug', 'description'])]
class Category extends Model { ... }
Keduanya valid. Untuk pemula, $fillable masih lebih mudah dipahami.

Langkah 5: Mencoba Eloquent lewat Tinker

Sekarang kita coba langsung berinteraksi dengan database menggunakan Tinker.

Jalankan:

php artisan tinker

1. Membuat Kategori Baru

$category = Category::create([
'name' => 'Teknologi',
'slug' => 'teknologi',
'description' => 'Artikel seputar teknologi dan programming',
]);

Kalau berhasil, Tinker akan menampilkan object Category yang baru dibuat.

2. Membuat Post Baru

$post = Post::create([
'category_id' => $category->id,
'title' => 'Belajar Laravel 13 dari Nol',
'slug' => 'belajar-laravel-13-dari-nol',
'excerpt' => 'Panduan lengkap belajar Laravel 13 untuk pemula.',
'body' => 'Ini adalah isi lengkap artikel tentang Laravel 13...',
'published_at' => now(),
]);

3. Mengambil Semua Data

Category::all();
Post::all();

4. Mengambil Satu Data Berdasarkan ID

Post::find(1);
Post::findOrFail(1); // akan error kalau data tidak ketemu

5. Menggunakan Relasi

// Ambil post beserta kategorinya
$post = Post::with('category')->find(1);
$post->category->name; // output: Teknologi

// Ambil kategori beserta semua post-nya
$category = Category::with('posts')->find(1);
$category->posts; // collection berisi semua post di kategori ini

6. Update Data

$post = Post::find(1);
$post->update([
'title' => 'Belajar Laravel 13 dari Nol (Update)',
]);

7. Hapus Data

$post = Post::find(1);
$post->delete();

Ketik exit untuk keluar dari Tinker.

Ringkasan Relasi yang Kita Pakai

Ini adalah relasi One to Many yang paling sering dipakai di aplikasi blog.

Tips Penting

  1. Selalu isi $fillable (atau pakai #[Fillable]) agar mass assignment aman.
  2. Gunakan with() untuk eager loading supaya menghindari masalah N+1 query.
  3. findOrFail() lebih aman daripada find() karena otomatis melempar 404 kalau data tidak ditemukan.
  4. Method relasi sebaiknya diberi return type (: HasMany, : BelongsTo) agar lebih jelas dan modern.

Tutorial terkait