Close

Tutorial Lengkap Eloquent Model Laravel & Implementasinya untuk Pemula

Panduan lengkap mempelajari Eloquent Model di Laravel, cara membuat model, memahami konvensi penting, mengambil data menggunakan query, memproses collection, hingga mengambil model tunggal dengan aman. Dilengkapi contoh implementasi nyata untuk pemula.

Tutorial Laravel - Model

Waktu membaca : 4 menit

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; // draft

Mengambil 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.

Leave a Reply

Your email address will not be published. Required fields are marked *

Leave a comment
scroll to top