Relasi Eloquent — Laravel

Eloquent membuat relasi antar tabel menjadi sangat mudah. Empat tipe relasi Eloquent: one-to-one, one-to-many, many-to-many dengan pivot, dan polymorphic.1 — On

Eloquent membuat relasi antar tabel menjadi sangat mudah.

<title id="eloquent-t">Empat tipe relasi Eloquent: one-to-one, one-to-many, many-to-many dengan pivot, dan polymorphic.</title>1 — One to One (hasOne)UserProfile1:12 — One to Many (hasMany)UserPost 1Post 2Post 33 — Many to Many (belongsToMany)Userrole_user(pivot table)Role4 — Polymorphic (morphTo/morphMany)Commentcommentable_typecommentable_idPostVideoProductMasing-masing relasi punya method Eloquent spesifik; pilih sesuai bentuk data yang kamu modelkan
4 pola relasi Eloquent — pilih sesuai bentuk data aplikasi kamu.

One to Many (hasMany / belongsTo):

// User punya banyak Post
class User extends Model {
    public function posts(): HasMany {
        return $this->hasMany(Post::class);
    }
}

// Post milik satu User
class Post extends Model {
    public function user(): BelongsTo {
        return $this->belongsTo(User::class);
    }
}

// Penggunaan:
$user = User::find(1);
$posts = $user->posts;         // Collection of Post
$author = $post->user;          // User object

Eager Loading (mencegah N+1 problem):

// BURUK — N+1 query (1 query user + N query posts)
$users = User::all();
foreach ($users as $user) {
    echo $user->posts->count(); // Query setiap iterasi!
}

// BAGUS — Eager loading (hanya 2 query)
$users = User::with("posts")->get();
foreach ($users as $user) {
    echo $user->posts->count(); // Sudah di-load!
}

SQL yang dihasilkan:

User::with("posts")->get();
// Query 1: SELECT * FROM users
// Query 2: SELECT * FROM posts WHERE user_id IN (1, 2, 3, ...)

Yang akan kamu pelajari