【问题标题】:Undefined variable: keyword error in laravel 5 when using advanced where clause未定义的变量:使用高级 where 子句时 laravel 5 中的关键字错误
【发布时间】:2018-06-10 10:31:55
【问题描述】:

我正在使用带有参数分组的高级 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'));

这部分给了我一个错误:未定义的变量:关键字

然后我在网上搜索,发现要像这样添加 use($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()

throw new BadMethodCallException("调用未定义的方法 {$className}::{$method}()");

这是导致 index.blade.php 错误的行

{{ $users->appends(['search' => Request::get('search')])->links("pagination::bootstrap-4") }}

在添加 use($keyword, $perPage) 之前不存在此错误

【问题讨论】:

    标签: php laravel laravel-5 where-clause


    【解决方案1】:

    你在closure 中是paginating。最后尝试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);
    

    【讨论】:

      【解决方案2】:

      您需要在闭包中添加use() 才能使其工作:

      ->where(function($query) use($keyword, $perPage) {
      

      但我确定您想将分页放在闭包之外以使查询真正起作用:

      User::where('role', 'admin')
          ->where(function($query) use($keyword) {
              $query->orWhere('id', 'LIKE', "%$keyword%")
                  ->orWhere('email', 'LIKE', "%$keyword%")
                  ->orWhere('name', 'LIKE', "%$keyword%");
          })
          ->paginate($perPage);
      

      【讨论】:

      • @Raj 也将其添加到闭包中以修复错误。但我认为你想把 paginate() 放在闭包之外。
      猜你喜欢
      • 2020-01-15
      • 1970-01-01
      • 2019-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-15
      • 2019-07-17
      • 2016-03-30
      相关资源
      最近更新 更多