Tutorial Laravel 12 dan Filament 5 #7 Konfigurasi Relasi pada Model

Belajar Laravel 12 dan Filament 5 dari dasar hingga tingkat lanjut melalui tutorial yang lengkap dan mudah dipahami. Laravel 12 merupakan framework PHP yang powerful untuk membangun aplikasi web modern, sedangkan Filament 5 adalah framework admin panel berbasis Laravel generasi terbaru yang memanfaatkan Livewire dan modern UI untuk membangun dashboard, manajemen data, hingga aplikasi kompleks dengan lebih cepat, efisien, dan terstruktur.

✅ Telah dilihat 372 kali

Rating: 5.00 ⭐

... 17 February 2026, 08:06

Relasi Model Category

Silakan teman teman buka file model Category.php kemudian tambahkan relasi berikut ini:

public function posts()
    {
        return $this->hasMany(Post::class);
    }

Maka secara keseluruhan akan menjadi seperti berikut ini:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    use HasFactory;

    protected $fillable = [
        'name',
        'slug',
        'description',
        'image',
        'is_active',
    ];
    public function posts()
    {
        return $this->hasMany(Post::class);
    }
}

Apa maksudnya? Artinya, satu kategori bisa memiliki banyak post. Kalau kita ibaratkan, kategori itu seperti sebuah "wadah", sedangkan post adalah "isi" yang ada di dalam wadah itu. Misalnya kita punya kategori Teknologi, maka di dalam kategori ini bisa ada banyak artikel/posting tentang teknologi: “Laravel 12 RESTful API”, “Kecerdasan Buatan”, “Tips JavaScript”, dan seterusnya.

Nah, dengan relasi hasMany, Laravel sudah mengerti bahwa saat kita memanggil:

$category = Category::find(1);
$category->posts;

Maka otomatis Laravel akan mencari semua post yang category_id-nya sesuai dengan kategori tersebut. Jadi, kita tidak perlu menulis query SQL manual seperti SELECT * FROM posts WHERE category_id = 1, karena sudah disediakan lewat relasi ini.

Kalau kita baca ulang kode model Category tadi, secara keseluruhan isinya sudah rapi:

  • Ada $fillable yang menentukan field mana saja yang bisa di-mass assignment.
  • Ada method posts() yang menjelaskan hubungan antara kategori dengan post.

Jadi kesimpulannya: relasi hasMany ini menjembatani hubungan one-to-many antara Category dan Post.

  • One category → Many posts. Dan ini nanti sangat memudahkan kita dalam pengelolaan data, terutama saat membuat aplikasi blog, portal berita, atau sistem manajemen konten.

Relasi Model Post

Silakan teman teman buka file model Post.php kemudian tambahkan relasi berikut ini:

public function user()
    {
        return $this->belongsTo(User::class);
    }
    
    public function category()
    {
        return $this->belongsTo(Category::class);
    }

Maka secara keseluruhan akan menjadi seperti berikut ini:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use HasFactory;

    protected $fillable = [
        'title',
        'content',
        'image',
        'user_id',
        'category_id',
    ];
    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function category()
    {
        return $this->belongsTo(Category::class);
    }
}

Kalau sebelumnya di model Category kita sudah bikin relasi hasMany(Post::class), sekarang di model Post kita balik arah relasinya, yaitu dengan belongsTo.

Artinya apa?

  • $this->belongsTo(User::class) → Setiap postingan pasti dimiliki oleh satu user (penulis). Jadi misalnya ada post berjudul “Belajar Laravel 12”, maka post itu harus punya user_id yang menunjuk ke siapa penulisnya.
  • $this->belongsTo(Category::class) → Setiap postingan juga pasti masuk dalam satu kategori. Misalnya post tadi berada di kategori “Programming”.

Jadi bisa kita simpulkan:

  • One User → Many Posts (satu user bisa menulis banyak post).
  • One Category → Many Posts (satu kategori bisa punya banyak post). Tapi di sisi post, satu post hanya punya satu user dan satu kategori.

Dengan relasi ini, nanti kita bisa dengan mudah ambil data. Contohnya:

$post = Post::find(1);

// ambil nama penulis post
echo $post->user->name;

// ambil nama kategori post
echo $post->category->name;

Laravel otomatis akan menghubungkan tabel posts dengan tabel users dan categories melalui foreign key user_id dan category_id. Jadi kita nggak perlu repot bikin query manual JOIN users ON users.id = posts.user_id.

Relasi Model User

Silakan teman teman buka file model User.php kemudian tambahkan relasi berikut ini:

public function posts()
    {
        return $this->hasMany(Post::class);
    }

Maka secara keseluruhan akan menjadi seperti berikut ini:

<?php

namespace App\Models;

// use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    /** @use HasFactory<\Database\Factories\UserFactory> */
    use HasFactory, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var list<string>
     */
    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    /**
     * The attributes that should be hidden for serialization.
     *
     * @var list<string>
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * Get the attributes that should be cast.
     *
     * @return array<string, string>
     */
    protected function casts(): array
    {
        return [
            'email_verified_at' => 'datetime',
            'password' => 'hashed',
        ];
    }

    public function posts()
    {
        return $this->hasMany(Post::class);
    }
}

Maksudnya adalah satu user bisa memiliki banyak post. Contoh gampangnya, kalau ada user bernama Andi, maka user ini bisa menulis banyak artikel, misalnya:

  • Post 1: Belajar Laravel
  • Post 2: Tips JavaScript
  • Post 3: Mengenal RESTful API

Semua post itu akan tersimpan di tabel posts dengan user_id yang menunjuk ke Andi.


Dengan adanya relasi ini, kita bisa dengan mudah ambil semua postingan milik seorang user. Misalnya:

$user = User::find(1);

// ambil semua postingan user
foreach ($user->posts as $post) {
    echo $post->title;
}

Laravel otomatis akan menjalankan query:

SELECT * FROM posts WHERE user_id = 1;

tapi kita tidak perlu menulis SQL manual, cukup manfaatkan relasi hasMany.


Kesimpulan

  • Satu user → banyak post (hasMany).
  • Satu post → satu user (belongsTo).

Kalau kita gabungkan dengan model Category, relasinya jadi lengkap:

  • User menulis banyak post.
  • Post ditulis oleh satu user.
  • Post masuk ke satu kategori.
  • Satu kategori punya banyak post.

Inilah yang disebut dengan one-to-many relationship di Laravel. Pada pertemuan berikutnya kita akan melangkah lebih jauh. Setelah sebelumnya kita sudah menyiapkan model beserta relasinya, sekarang saatnya kita mulai belajar bagaimana cara membuat resource di dalam Filament.

Resource ini nantinya akan menjadi jembatan antara model yang sudah kita buat dengan tampilan antarmuka admin yang disediakan oleh Filament. Jadi, dengan resource ini kita bisa lebih mudah mengatur form input, tabel data, hingga aksi-aksi seperti edit dan delete.

Intinya, model yang sudah kita siapkan tadi tidak hanya berhenti sebagai representasi data di database, tetapi juga bisa langsung kita manfaatkan untuk membangun panel admin yang interaktif dan rapi.

Nah, di materi selanjutnya kita akan mulai praktik membuat resource pertama kita di Filament.

Daftar eBook