50

Using the Eloquent ORM I have my models set up like so: Post belongsToMany Category

Post.php

public function categories()
{
    return $this->belongsToMany('Category', 'posts_categories');
}

I want to filter posts by a column of the categories relationship.

So I want to do something like:

$posts->where('categories.slug', '=', Input::get('category_slug'));

This doesn't work though.

I also tried:

$with['categories'] = function($query){ 
    $query->where('slug', '=', Input::get('category_slug'));
};

$posts::with($with)->get();

But I thnk that's for filtering the categories not filtering BY the category.

Can anyone show me the way?

iamjonesy
  • 24,732
  • 40
  • 139
  • 206

2 Answers2

107

I can't access my Vagrant box right now, but I believe this should work:

$posts = Post::whereHas('categories', function($q)
{
    $q->where('slug', '=', Input::get('category_slug'));

})->get();
petkostas
  • 7,250
  • 3
  • 26
  • 29
5

Here's a quick way to filter on related model column:

$allConsultants = Consultant::whereHas('user', function($query)
{
    $query->where('is_approved', '=', 1);

})->get();
hackernewbie
  • 1,606
  • 20
  • 13