Profile Picture About Author - yogaardiana
著者Yogaardiana
公開日

Stop "Tebak-tebakan" Saat Coding! Cara Mudah Paham Konsep Laravel Relation

Pernah nggak sih kamu ada di posisi ini: Jam 2 pagi, kopi tinggal ampas, deadline project makin dekat, tapi kamu malah *stuck* di satu error sepele?


Kamu lagi coba ambil data dari database, tapi Laravel malah teriak error. Padahal rasanya logika udah bener. Setelah dicek, ternyata masalahnya klasik: **Kamu kebalik mendefinisikan relasi.**


"Ini pakai hasMany atau belongsTo ya?"

"Foreign key-nya ditaruh di tabel User atau tabel Post ya?"


Kalau kamu pernah (atau sedang) mengalami momen "tebak-tebakan" ini, tenang. Kamu nggak sendirian. Saya pun dulu menghabiskan banyak waktu cuma buat *trial and error* urusan **Laravel Relation** ini.


Hari ini, mari kita sudahi drama tebak-tebakan tersebut. Kita akan bahas konsep ini dengan cara yang paling santai, tanpa bahasa buku teks yang bikin ngantuk.


Analogi Sederhana: Orang Tua dan Anak


Lupakan dulu kodingan. Mari bayangkan kehidupan nyata.


Dalam Laravel Relation, konsep yang paling dasar adalah hubungan antara "Parent" (Induk) dan "Child" (Anak).


Bayangkan seorang Ayah (Parent) dan Anak-anaknya(Child).

  1. Satu orang Ayah bisa punya banyak anak.
  2. Satu orang Anak, pasti milik (berasal dari) satu Ayah kandung.


Nah, kalau kita terjemahkan ke bahasa Laravel:

  1. Ayah -> hasMany (Punya Banyak) -> Anak
  2. Anak -> belongsTo (Milik Dari) -> Ayah


Simpel, kan? Kuncinya ada di **sudut pandang** siapa yang sedang kita bicarakan.


Studi Kasus: User dan Post


Biar makin relate sama kerjaan kita sebagai developer, kita pakai contoh paling umum: User (Pengguna) dan Post (Artikel Blog).


Satu User bisa nulis banyak Post. Tapi satu Post spesifik, pasti ditulis oleh satu User saja.


1. Sudut Pandang User (Si "Parent")


Kalau kita lagi buka file model `User.php`, kita memposisikan diri sebagai User. Kita ingin bilang: "Hei Laravel, saya punya banyak postingan lho."


Maka kodenya adalah:


// Model: User.php

public function posts()
{
// Bacanya: User PUNYA BANYAK Post
return $this->hasMany(Post::class);
}

Perhatikan: Nama function-nya posts() (jamak/plural), karena logikanya dia punya banyak post.


2. Sudut Pandang Post (Si "Child")


Sekarang kita pindah ke file model Post.php. Sebagai sebuah Post, dia harus tahu siapa pemiliknya. Dia ingin bilang: "Hei, saya ini milik si User A, lho."


Maka kodenya adalah:


// Model: Post.php

public function user()
{
// Bacanya: Post MILIK DARI User
return $this->belongsTo(User::class);
}

Perhatikan: Nama function-nya user() (tunggal/singular), karena dia cuma punya satu pemilik.


Cheat Sheet: Di Mana Foreign Key Berada?


Ini bagian yang sering bikin pemula overthinking. Di tabel mana kita harus simpan kolom user_id?

Rumus jitunya begini:


Tabel yang punya foreign key (user_id) adalah tabel yang modelnya mendeklarasikan belongsTo.


Ingat analogi anak tadi? Anaklah yang membawa nama keluarga ayahnya. Jadi, di dalam tabel database posts, harus ada kolom user_id. Sedangkan di tabel users, kita tidak butuh kolom post_id.

Kenapa? Karena kalau di tabel users ada post_id, berarti satu user cuma bisa bikin satu post dong? Kan nggak masuk akal.


Kesimpulan: Jangan Dihafal, tapi Dipahami


Intinya, Laravel Relation itu bukan soal menghafal sintaks, tapi memahami arah hubungannya.

  1. Kalau model tersebut "memiliki" banyak hal lain -> Gunakan hasMany.
  2. Kalau model tersebut "dimiliki" atau "bergantung" pada model lain -> Gunakan belongsTo.

Begitu kamu paham pola pikir ini, fitur relation lain yang lebih kompleks (seperti manyToMany atau hasOneThrough) bakal terasa jauh lebih mudah.


Gimana? Sekarang udah nggak perlu main tebak-tebakan lagi kan pas bikin relasi?


Semoga artikel ini membantu meluruskan benang kusut di kepala soal relasi Laravel! Kalau kamu mau diskusi lebih lanjut atau mau lihat implementasi kode ini di real-project, boleh banget mampir ke halaman Portfolio saya atau sapa saya di LinkedIn.


Sumber : https://laravel.com/docs/12.x/eloquent-relationships


Bantu Support Aku :

Instagram : https://www.instagram.com/yogaardianaaa/

Youtube : https://www.youtube.com/@yogaardiana_dev/

Tiktok : https://tiktok.com/@yogaardianaaa

Threads : https://www.threads.com/@yogaardianaaa