Salah satu kekuatan terbesar Laravel adalah Eloquent Relationship โ cara mengelola relasi antar-tabel tanpa menulis query JOIN manual. Memahami ini membuat kode Anda jauh lebih bersih. Artikel ini membahas tiga relasi paling umum beserta contohnya.
1. One to One (hasOne / belongsTo)
Contoh: satu User punya satu Profile. Definisikan di model:
// Model User
public function profile()
{
return $this->hasOne(Profile::class);
}
// Model Profile
public function user()
{
return $this->belongsTo(User::class);
}
Mengaksesnya:
$user = User::find(1);
echo $user->profile->bio;
2. One to Many (hasMany)
Contoh paling umum: satu Category punya banyak Post.
// Model Category
public function posts()
{
return $this->hasMany(Post::class);
}
// Model Post
public function category()
{
return $this->belongsTo(Category::class);
}
Mengaksesnya:
$category = Category::find(1);
foreach ($category->posts as $post) {
echo $post->title;
}
// arah sebaliknya
$post = Post::find(1);
echo $post->category->name;
3. Many to Many (belongsToMany)
Contoh: satu Post punya banyak Tag, dan satu Tag dipakai banyak Post. Relasi ini butuh tabel pivot (mis. post_tag).
// Model Post
public function tags()
{
return $this->belongsToMany(Tag::class);
}
// Model Tag
public function posts()
{
return $this->belongsToMany(Post::class);
}
Menambah relasi lewat pivot:
$post = Post::find(1);
$post->tags()->attach([1, 2, 3]); // tambah tag
$post->tags()->detach(2); // hapus satu
$post->tags()->sync([1, 3]); // set ulang
Hindari N+1 Query dengan Eager Loading
Saat menampilkan banyak data beserta relasinya, gunakan with() agar tidak boros query:
$posts = Post::with('category', 'tags')->get();
Tanpa ini, setiap post akan menjalankan query terpisah untuk relasinya โ masalah performa klasik.
Kesimpulan
Eloquent Relationship membuat pengelolaan relasi antar-tabel jadi intuitif: hasOne/hasMany untuk relasi "punya", belongsTo untuk "milik", dan belongsToMany untuk relasi banyak-ke-banyak lewat pivot. Selalu pakai eager loading (with()) untuk performa. Untuk tips performa lainnya, lihat panduan optimasi performa Laravel kami.