我有两个模型叫做 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
的一部分表。
我如何能够使用范围或熟悉的东西来搜索结果集,而不在大多数查询中重复它?
最佳答案
您需要在User
模型中创建scopeSearch
,您应该这样使用它:
$posts = Page::with('user')->whereHas('user', function($q) use ($search)
{
$q->search($search);
})->get();
关于php - 关系的 Eloquent 查询范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26978968/