我有两个名为Page
和User
的模型,我按如下方式设置了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
表的一部分,而name
是Page
表的一部分。
我如何能够使用范围或熟悉的东西来搜索结果集,而不是在大多数查询中重复它?
答案 0 :(得分:5)
您需要在scopeSearch
模型中创建User
,您应该这样使用它:
$posts = Page::with('user')->whereHas('user', function($q) use ($search)
{
$q->search($search);
})->get();