我正在使用带参数分组的高级where子句。这是示例
$users = User::where('role', 'admin')
->where(function ($query){
$query->orWhere('id', 'LIKE', "%$keyword%")
->orWhere('email', 'LIKE', "%$keyword%")
->orWhere('name', 'LIKE', "%$keyword%")
->paginate($perPage);
});
return view('admin.index', compact('users'));
这部分给我一个错误:未定义的变量:关键字
然后我在网上搜索并发现添加使用($ keyword,$ perPage)就像这样
$users = User::where('role', 'admin')
->where(function ($query) use($keyword, $perPage){
$query->orWhere('id', 'LIKE', "%$keyword%")
->orWhere('email', 'LIKE', "%$keyword%")
->orWhere('name', 'LIKE', "%$keyword%")
->paginate($perPage);
});
但是它在我的视图文件中显示错误
调用未定义的方法Illuminate \ Database \ Query \ Builder :: appends()
抛出新的BadMethodCallException(“调用未定义的方法{$ className} :: {$ method}()”);
这是index.blade.php中导致错误的行
{{ $users->appends(['search' => Request::get('search')])->links("pagination::bootstrap-4") }}
在添加use($ keyword,$ perPage)之前没有出现此错误
答案 0 :(得分:3)
您需要将use()
添加到闭包中才能使其正常工作:
->where(function($query) use($keyword, $perPage) {
但我确定你想把paginate放在闭包之外,以使查询真正起作用:
User::where('role', 'admin')
->where(function($query) use($keyword) {
$query->orWhere('id', 'LIKE', "%$keyword%")
->orWhere('email', 'LIKE', "%$keyword%")
->orWhere('name', 'LIKE', "%$keyword%");
})
->paginate($perPage);
答案 1 :(得分:3)
paginating
内closure
。最后尝试paginate
,如下所示 -
$users = User::where('role', 'admin')
->where(function ($query) use($keyword){
$query->orWhere('id', 'LIKE', "%$keyword%")
->orWhere('email', 'LIKE', "%$keyword%")
->orWhere('name', 'LIKE', "%$keyword%")
;
})->paginate($perPage);