web-dev-qa-db-fra.com

Laravel Filtre éloquent par colonne de relation

En utilisant l'ORM Eloquent, mes modèles sont configurés comme suit: PostbelongsToManyCategory

Post.php

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

Je souhaite filtrer les messages par une colonne de la relation des catégories.

Je veux donc faire quelque chose comme:

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

Mais cela ne fonctionne pas.

J'ai aussi essayé:

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

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

Mais je pense que c'est pour filtrer les catégories et non pas par la catégorie.

Quelqu'un peut-il me montrer le chemin?

23
iamjonesy

Je ne peux pas accéder à ma boîte Vagrant pour le moment, mais je pense que cela devrait fonctionner:

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

})->get();
47
petkostas