// Without eager loading (N+1 problem) foreach (App\Models\Post::all() as $post) { echo $post->user->name; // Each user access makes a new query } // With eager loading (solves N+1 problem) $posts = App\Models\Post::with('user')->get(); foreach ($posts as $post) { echo $post->user->name; // User is already loaded, no extra queries } // Eager loading multiple relationships $posts = App\Models\Post::with(['user', 'comments'])->get(); // Eager loading with constraints $posts = App\Models\Post::with(['comments' => function ($query) { $query->where('approved', 1); }])->get();