方法 Illuminate\Support\Collection::offset 不存在

Method Illuminate\Support\Collection::offset does not exist

嗨,我正在尝试对我的视图进行分页,我的控制器中有以下用于分页的代码:

    public function membrevis()
      {
      $filter = isset($_GET['filter']) ? $_GET['filter'] : null;
      $query = DB::table('users')
        ->join('user_role', 'users.id', '=', 'user_role.user_id')
        ->join('roles', 'user_role.role_id', '=', 'roles.id')
        ->where('users.valid','=',0)
        ->select('users.*','roles.description');
        if ($filter != null) {
        $query->where('users.name','like','%'.$filter.'%')
            ->orWhere('roles.description','like','%'.$filter.'%');
        }
     $users = $query->get();


    $itemsPerPage = 8 ;
    $currentPage  = isset( $_GET['page'] ) && is_numeric( $_GET['page'] ) ? $_GET['page'] : 1;
    $urlPattern   = '/profilecontroller/membrevis?page=(:num)';
    $totalItems   = $users->count();
    $donner   = $users->offset( ( $currentPage - 1 ) * $itemsPerPage )->limit( $itemsPerPage )->get();
    $paginator = new  Paginator( $totalItems, $itemsPerPage, $currentPage, $urlPattern );

return view('membre2',['users'=> $donner,'paginator'=> $paginator]);

我的视图 membre2.blade.php 也有以下用于分页的代码:

  <form>
 ....
  </form>
 <table>
@foreach($users as $row)
....
@endforeach
 </table>
echo $paginator;

但我仍然遇到此错误方法Illuminate\Support\Collection::offset 不存在。 知道我已经通过 CMD 安装了 "jasongrimes/paginator:~1.0"

如有任何帮助,我们将不胜感激!

Illuminate\Support\Collection::offset 不存在。 这是因为你的 $users 是 [=20= 的实例]Illuminate\Support\Collection。要检查它,请在 $totalItems = $users->count(); 之后使用 dd(get_class($users));必须打印 Illuminate\Support\Collection。集合实例有计数方法,return 集合项计数。为了使您的 $users->offset( ( $currentPage - 1 ) * $itemsPerPage )->limit( $itemsPerPage )->get() 代码正常工作,您必须更改 $users 到 $query(maybe $users) 其中 $query(maybe $users)\Illuminate\Database\Query\Builder.
对于这种情况,请使用

$query->->offset( ( $currentPage - 1 ) * $itemsPerPage )->limit( $itemsPerPage )->get();

您更正后的代码是

public function membrevis()
{
    $filter = isset($_GET['filter']) ? $_GET['filter'] : null;
    $query = DB::table('users')
        ->join('user_role', 'users.id', '=', 'user_role.user_id')
        ->join('roles', 'user_role.role_id', '=', 'roles.id')
        ->where('users.valid','=',0)
        ->select('users.*','roles.description');
    if ($filter != null) {
        $query->where('users.name','like','%'.$filter.'%')
            ->orWhere('roles.description','like','%'.$filter.'%');
    }

    $itemsPerPage = 8 ;
    $currentPage  = isset( $_GET['page'] ) && is_numeric( $_GET['page'] ) ? $_GET['page'] : 1;
    $urlPattern   = '/profilecontroller/membrevis?page=(:num)';
    $totalItems   = $query->count();
    $donner   = $query->offset( ( $currentPage - 1 ) * $itemsPerPage )->limit( $itemsPerPage )->get();
    $paginator = new  Paginator( $totalItems, $itemsPerPage, $currentPage, $urlPattern );

    return view('membre2',['users'=> $donner,'paginator'=> $paginator]);
}

我删除了 $users = $query->get() 方法,这是数据库中的另一个请求。为了获得总用户数,您使用了 $totalItems = $query->count(); 这是更优化的查询