Eager loading constraints

Submitted by stidges - 10 years ago

Ever find yourself wanting to only find models that have a certain relationship matching certain conditions? Laravel 4.1 makes this really easy, and introduces great eager loading constraints!

<?php

// Post model
class Post extends Eloquent {
    
    public function tags()
    {
        return $this->belongsToMany('Tag');
    }
}

// Tag model
class Tag extends Eloquent()
{
    
    public function posts()
    {
        return $this->belongsToMany('Post');
    }
}

// Imagine if you want to get ONLY the posts that have the tag 'laravel', that are posted
// in the last week.
$posts = Post::whereHas('tags', function($query)
{
    // Set the constraint on the tags
    $query->where('name', '=', 'laravel');
})->where('published_at', '>=', Carbon\Carbon::now()->subWeek())->get();