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

时间:2018-06-09 10:00:29

标签: php laravel laravel-5 laravel-4 eloquent

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

    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;

但是我仍然得到这个错误方法照明\支持\集合::偏移不存在。知道我已经安装了CMD的“jasongrimes / paginator:~1.0”

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

Illuminate \ Support \ Collection :: offset不存在。这是因为 $ users Illuminate \ Support \ Collection 的实例。要检查它是否使用 dd(get_class($ users)); $ totalItems = $ users-&gt; count(); 必须打印照亮\支持\集合即可。集合实例具有count方法,它返回 Collection items count 。对于 $ users-&gt;偏移量(($ currentPage - 1)* $ itemsPerPage) - &gt; limit($ itemsPerPage) - &gt; get()代码正常工作,您必须更改 $ users到$ query(可能是$ users)其中 $ query(可能是$ 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-&gt; get()方法,这是db中的另一个请求。为了获得总用户数,您使用 $ totalItems = $ query-&gt; count(); 这是更优化的查询