Tutorial lengkap Eloquent Model Laravel, Model dalam Laravel adalah jembatan utama antara kode aplikasi dan database. Dengan memanfaatkan Eloquent ORM, Anda dapat bekerja dengan data menggunakan sintaks yang ekspresif, bersih, dan mudah dipahami tanpa menulis query SQL secara manual. Memahami model sangat penting terutama jika Anda membangun aplikasi berbasis Laravel, karena setiap perubahan pada UI sering kali berhubungan langsung dengan data model.
Artikel ini mengupas dasar Eloquent Model secara mendalam, mulai dari pengenalan, konvensi, pengambilan data, hingga cara kerja query tertentu, disertai contoh implementasi nyata di Laravel.
Pengenalan Model Laravel
Model adalah representasi dari sebuah tabel database. Dengan membuat model, Anda memberi Laravel “wajah” untuk mengelola data, seperti menyimpan, memvalidasi, memfilter, dan memodifikasi informasi. Dengan Eloquent, setiap record pada tabel dianggap sebagai objek yang bisa diproses layaknya data dalam OOP, sehingga kode terasa lebih natural dan rapi.
Karena Livewire sangat bergantung pada perubahan data, penggunaan model yang tepat akan memudahkan Anda membangun aplikasi reaktif tanpa kerumitan penanganan database yang dalam.
Generate Kelas Model Laravel
Laravel menyediakan command untuk membuat model secara otomatis:
php artisan make:model Post
Ini akan menghasilkan file:
app/Models/Post.php
Jika Anda ingin menautkan migration langsung:
php artisan make:model Post -m
Berikut contoh model dasar:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
//
}
Contoh Implementasi Model + Migration
Model Post dengan migration:
php artisan make:model Post -m
Migration-nya:
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->timestamps();
});
Implementasi penggunaan di controller:
use App\Models\Post;
class PostController extends Controller
{
public function store()
{
Post::create([
'title' => 'Belajar Laravel',
'content' => 'Ini adalah konten lengkapnya…'
]);
}
}
Konvensi Nama di Model
Laravel menetapkan beberapa aturan otomatis untuk memudahkan developer, sehingga Anda tidak perlu banyak konfigurasi manual. Namun jika diperlukan, semua konvensi ini dapat diubah.
Nama Tabel
Laravel akan mengonversi nama model menjadi bentuk jamak sebagai nama tabel.
Post → posts
UserProfile → user_profiles
Jika tabel Anda tidak mengikuti pola ini:
class Post extends Model
{
protected $table = 'artikel';
}
Implementasi penggunaan:
$posts = Post::all(); // Mengambil dari tabel 'artikel'
Primary Key
Eloquent mengasumsikan primary key bernama id. Jika tabel Anda memiliki primary key lain:
protected $primaryKey = 'post_id';
Menggunakan primary key non-increment:
public $incrementing = false;
protected $keyType = 'string';
Contoh implementasi:
$post = Post::find('POST12345');
UUID / ULID
Laravel mendukung UUID/ULID bawaan:
use Illuminate\Database\Eloquent\Concerns\HasUuids;
class Post extends Model
{
use HasUuids;
}
Migration contoh UUID:
$table->uuid('id')->primary();
Implementasi penyimpanan:
Post::create([
'title' => 'Judul',
'content' => 'Konten'
]);
// ID otomatis berupa UUID
Timestamp
Laravel otomatis mengelola created_at dan updated_at.
Mematikan timestamp:
public $timestamps = false;
Mengubah nama kolom timestamp:
const CREATED_AT = 'dibuat_pada';
const UPDATED_AT = 'diupdate_pada';
Koneksi Database
Model dapat diarahkan ke database lain:
protected $connection = 'mysql_reporting';
Default Nilai Atribut
Menentukan nilai default:
protected $attributes = [
'status' => 'draft',
];
Implementasi:
$post = Post::create([
'title' => 'Draft Baru',
'content' => 'Konten awal'
]);
echo $post->status; // draftMengambil Model
Bagian ini menjelaskan bagaimana mengambil data dengan query Eloquent, lengkap dengan implementasinya.
Membuat Query
Query dasar:
$posts = Post::where('status', 'published')->get();
Memilih kolom tertentu:
$posts = Post::select('title', 'content')->get();
Order & filter:
$posts = Post::orderBy('created_at', 'desc')->limit(10)->get();
Refresh Model
Jika data berubah di database setelah model dimuat:
$post->refresh();
Contoh implementasi:
$post = Post::find(1);
// misal data diubah secara manual dari database
sleep(2);
$post->refresh();
echo $post->updated_at;
Collection
get() mengembalikan Eloquent Collection:
$posts = Post::all();
$judul = $posts->pluck('title');
Implementasi menghitung panjang konten:
$panjang = $posts->map(fn($p) => strlen($p->content));
Chunking
Untuk memproses data besar:
Post::chunk(100, function ($posts) {
foreach ($posts as $post) {
// proses per batch
}
});
Implementasi real: sinkronisasi data ke API lain
Post::chunk(200, function ($chunk) {
foreach ($chunk as $post) {
ExternalApi::send($post);
}
});
Chunking Lazy Collections
Lebih hemat memory:
foreach (Post::lazy() as $post) {
// proses satu per satu
}
Subquery Select
Contoh menampilkan komentar terbaru pada setiap post:
$latestComment = Comment::select('content')
->whereColumn('post_id', 'posts.id')
->latest()
->limit(1);
$posts = Post::select('*')
->selectSub($latestComment, 'latest_comment')
->get();
Subquery Ordering
Mengurutkan post berdasarkan waktu komentar terbaru:
$posts = Post::orderByDesc(
Comment::select('created_at')
->whereColumn('post_id', 'posts.id')
->latest()
)->get();
Mengambil Model Tunggal
Eloquent menyediakan banyak metode untuk mengambil satu data secara aman dan efektif.
Not Found Exceptions
Ketika data wajib ada:
$post = Post::findOrFail($id);
Penggunaan di route:
Route::get('/post/{id}', function ($id) {
return Post::findOrFail($id);
});
Retrieving or Creating Models
Mengambil atau membuat otomatis:
$post = Post::firstOrCreate(
['slug' => 'belajar-laravel'],
['title' => 'Belajar Laravel Dari Nol']
);
Retrieving Aggregates
Contoh penggunaan agregasi:
$total = Post::count();
$maxId = Post::max('id');
$avgLength = Post::avg(DB::raw('LENGTH(content)'));
Kesimpulan
Eloquent Model adalah fondasi penting ketika bekerja dengan database di Laravel. Dengan memahami konvensi, cara membuat model, mengelola atribut, mengambil data, dan menggunakan query canggih seperti subquery, Anda dapat membangun aplikasi yang bersih, scalable, dan efisien. Jika Anda menggunakan Livewire, pengetahuan model semakin penting karena data selalu menjadi bagian dari interaksi UI.
Teruslah eksplorasi fitur lanjutan seperti relasi, eager loading, mutator, accessor, dan scope untuk memaksimalkan kekuatan Eloquent.

