未定义的变量:使用高级where子句时,laravel 5中的关键字错误

时间:2017-12-30 07:12:59

标签: php laravel laravel-5 where-clause

我正在使用带参数分组的高级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)之前没有出现此错误

2 个答案:

答案 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)

paginatingclosure。最后尝试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);