Eloquent membuat relasi antar tabel menjadi sangat mudah.
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, ...)