关系上雄辩的查询范围

gui*_*sen 1 php laravel eloquent laravel-4

我有两个叫做的模型Page,User并且我建立了如下的Eloquent关系:

public function user() {
  return $this->belongsTo('User')
}
Run Code Online (Sandbox Code Playgroud)

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

我已经使用了scopeSearch但我不确定如何搜索结果集.

目前我有这样的范围:

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

所以当我Page::with('user')->search('Test')->get()不工作的时候.问题(可能)是username列是User表的name一部分,而且是表的一部分Page.

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

Mar*_*łek 5

你需要scopeSearchUser模型中创建,你应该这样使用它:

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

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