关系上雄辩的查询范围

时间:2014-11-17 18:03:44

标签: php laravel laravel-4 eloquent

我有两个名为PageUser的模型,我按如下方式设置了Eloquent关系:

public function user() {
  return $this->belongsTo('User')
}

当我dd(Page::with('user')->get())时,我得到了正确的结果。但是现在我想对这个结果进行搜索过滤。

我使用了scopeSearch,但我不确定如何搜索结果集。

目前我有这样的范围:

public function scopeSearch($query, $search) {
  $query->where('username', 'LIKE', '%'.$search.'%')
     ->orWhere('name', 'LIKE', '%'.$search.'%')
}

所以当我Page::with('user')->search('Test')->get()时它不起作用。 问题(可能)是username列是User表的一部分,而namePage表的一部分。

我如何能够使用范围或熟悉的东西来搜索结果集,而不是在大多数查询中重复它?

1 个答案:

答案 0 :(得分:5)

您需要在scopeSearch模型中创建User,您应该这样使用它:

$posts = Page::with('user')->whereHas('user', function($q) use ($search)
{
    $q->search($search);

})->get();