Laravel Eloquent按关系列过滤

iam*_*esy 25 orm eloquent laravel-4

使用Eloquent ORM我的模型设置如下: Post belongsToMany Category

post.php中

public function categories()
{
    return $this->belongsToMany('Category', 'posts_categories');
}
Run Code Online (Sandbox Code Playgroud)

我想按类别关系的列过滤帖子.

所以我想做一些事情:

$posts->where('categories.slug', '=', Input::get('category_slug'));
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

我也尝试过:

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

$posts::with($with)->get();
Run Code Online (Sandbox Code Playgroud)

但我认为这是为了过滤不按类别过滤的类别.

有谁能告诉我的方式?

pet*_*tas 49

我现在无法访问我的Vagrant盒子,但我相信这应该有效:

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

})->get();
Run Code Online (Sandbox Code Playgroud)

  • whereHas 进行全表扫描。对于小表,如果说(类别)有 100,000 行,这很好,那么这将非常缓慢。那你怎么办? (2认同)