; Memahami Model - Blog Rudi Kurniawan

Blog Laravel Indonesia

Belajar Laravel dengan Mudah dan Menyenangkan

Memahami Model
12-07-2025 | Admin User Programming 19 x dilihat

Memahami Model

Apa Itu Model di Laravel?

Model adalah kelas PHP di Laravel yang mewakili tabel di database, memungkinkan kamu mengelola data (CRUD) menggunakan Eloquent ORM. Setiap model terhubung dengan satu tabel dan menyederhanakan interaksi dengan database.

Penamaan Tabel agar Sesuai dengan Model

Laravel memiliki konvensi penamaan untuk model dan tabel:

  • Tabel: Nama tabel menggunakan huruf kecil, snake_case, dan bentuk jamak (misalnya, posts, anggaran_kegiatan).
  • Model: Nama model menggunakan StudlyCase (huruf kapital di awal kata) dan bentuk tunggal (misalnya, Post, AnggaranKegiatan).
  • Konvensi Default: Laravel mengasumsikan nama tabel adalah versi jamak dari nama model. Misalnya, model Post otomatis terhubung ke tabel posts.

Contoh:

  • Tabel posts → Model Post.
  • Tabel anggaran_kegiatan → Model AnggaranKegiatan.

Membuat Model

Jalankan perintah berikut untuk membuat model:

php artisan make:model Post

Ini membuat file app/Models/Post.php yang otomatis terhubung ke tabel posts.

Jika Nama Tabel Tidak Sama dengan Nama Model

Jika nama tabel tidak mengikuti konvensi (misalnya, tabel bernama data_postingan untuk model Post), tentukan nama tabel secara eksplisit di model dengan properti $table:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $table = 'data_postingan';
}

Jika Kunci Primer Bukan id

Laravel mengasumsikan kunci primer tabel adalah id. Jika kunci primer memiliki nama lain, seperti id_program, tentukan di model dengan properti $primaryKey:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Program extends Model
{
    protected $table = 'program_kegiatan';
    protected $primaryKey = 'id_program';
}

Jika kunci primer bukan auto-incrementing, tambahkan:

public $incrementing = false;

Jika bukan integer (misalnya, UUID), tambahkan:

protected $keyType = 'string';

Relasi Antar Tabel

Eloquent mendukung relasi seperti one-to-one, one-to-many, dan many-to-many. Berikut penjelasan untuk relasi antar 2, 3, dan 4 tabel dengan contoh sederhana.

Relasi 2 Tabel (One-to-Many)

Skenario: Tabel users (kolom: id, name) dan posts (kolom: id, user_id, title). Satu pengguna memiliki banyak postingan.

  • Model User:
    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    
    class User extends Model
    {
        public function posts()
        {
            return $this->hasMany(Post::class);
        }
    }
    
  • Model Post:
    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Post extends Model
    {
        public function user()
        {
            return $this->belongsTo(User::class);
        }
    }
    
  • Penggunaan:
    $user = User::find(1);
    $posts = $user->posts; // Ambil semua postingan pengguna
    $post = Post::find(1);
    $userName = $post->user->name; // Ambil nama pengguna dari postingan
    

Relasi 3 Tabel (One-to-Many + One-to-Many)

Skenario: Tambah tabel comments (kolom: id, post_id, content). Satu postingan memiliki banyak komentar.

  • Model Post (tambahan relasi):
    public function comments()
    {
        return $this->hasMany(Comment::class);
    }
    
  • Model Comment:
    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Comment extends Model
    {
        public function post()
        {
            return $this->belongsTo(Post::class);
        }
    }
    
  • Penggunaan:
    $post = Post::find(1);
    $comments = $post->comments; // Ambil semua komentar untuk postingan
    $user = $post->user; // Ambil pengguna dari postingan
    

Relasi 4 Tabel (Many-to-Many)

Skenario: Tambah tabel categories (kolom: id, name) dan tabel pivot category_post (kolom: post_id, category_id). Satu postingan bisa memiliki banyak kategori, dan satu kategori bisa dimiliki banyak postingan.

  • Model Post (tambahan relasi):
    public function categories()
    {
        return $this->belongsToMany(Category::class, 'category_post');
    }
    
  • Model Category:
    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Category extends Model
    {
        public function posts()
        {
            return $this->belongsToMany(Post::class, 'category_post');
        }
    }
    
  • Penggunaan:
    $post = Post::find(1);
    $categories = $post->categories; // Ambil semua kategori untuk postingan
    $category = Category::find(1);
    $posts = $category->posts; // Ambil semua postingan untuk kategori
    

Mengapa Model Penting?

  • Sederhana: Mengelola data tanpa SQL langsung.
  • Konsisten: Konvensi penamaan membuat kode mudah dipahami.
  • Fleksibel: Mendukung kustomisasi tabel dan kunci primer serta relasi kompleks.

Contoh Praktis

Buat model untuk tabel program_kegiatan dengan kunci primer id_program:

php artisan make:model Program

Edit app/Models/Program.php:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Program extends Model
{
    protected $table = 'program_kegiatan';
    protected $primaryKey = 'id_program';
    protected $fillable = ['nama_program', 'anggaran'];
}

Gunakan di route:

use App\Models\Program;

Route::get('/program', function () {
    return Program::all();
});

Langkah Selanjutnya

  • Pelajari relasi lanjutan seperti has-many-through atau polymorphic.
  • Gunakan factory untuk membuat data uji model.
  • Baca dokumentasi Eloquent untuk fitur seperti scopes atau mutators.

Selamat! Kamu sudah menguasai dasar model Laravel, penamaan tabel, kunci primer, dan relasi antar tabel!

Share this

Facebook Whatsapp