Laravel. Utiliser scope () dans les modèles avec relation

J’ai deux modèles apparentés: Category et Post .

Le modèle Post a une étendue published (méthode scopePublished() ).

Lorsque j’essaie d’obtenir toutes les catégories avec cette scope:

 $categories = Category::with('posts')->published()->get(); 

J’ai une erreur:

Appel à la méthode non définie published()

Catégorie:

 class Category extends \Eloquent { public function posts() { return $this->HasMany('Post'); } } 

Poster:

 class Post extends \Eloquent { public function category() { return $this->belongsTo('Category'); } public function scopePublished($query) { return $query->where('published', 1); } } 

Vous pouvez le faire en ligne:

 $categories = Category::with(['posts' => function ($q) { $q->published(); }])->get(); 

Vous pouvez également définir une relation:

 public function postsPublished() { return $this->hasMany('Post')->published(); // or this way: // return $this->posts()->published(); } 

et alors:

 //all posts $category->posts; // published only $category->postsPublished; // eager loading $categories->with('postsPublished')->get();