PHP
Efficiently Eager Load Relationships with Constraints in Laravel Eloquent
Optimize database queries by efficiently eager loading related models using Eloquent's `with` method, applying specific constraints to the loaded relationships to refine data.
use App\Models\User;
use App\Models\Post;
// Eager load all posts for users
$users = User::with('posts')->get();
// Eager load only active posts for users
$activeUsers = User::with(['posts' => function ($query) {
$query->where('status', 'published');
}])->get();
// Conditionally eager load based on a runtime condition
$userId = 1;
$userWithComments = User::when($userId, function ($query, $userId) {
return $query->with(['comments' => function ($query) use ($userId) {
$query->where('user_id', $userId);
}]);
})->find($userId);
// Eager loading specific columns only
$postsWithAuthors = Post::with('user:id,name,email')->get();
How it works: This snippet demonstrates how to efficiently eager load relationships in Laravel Eloquent, preventing the N+1 query problem. It covers basic eager loading, adding constraints to eager loaded relationships (e.g., only fetching 'published' posts), and conditionally eager loading relationships based on a given condition. It also shows how to select only specific columns from the related model to further optimize memory and query performance.