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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/50773055/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 17:48:23  来源:igfitidea点击:

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

phplaravellaravel-5laravel-4eloquent

提问by H.tay

Hi i'm trying to paginate my view and i have this following code in my controller for the pagination:

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

    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]);

My view membre2.blade.php has the following code as well for pagination:

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

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

But i' still get this error Method Illuminate\Support\Collection::offset does not exist.knowing i already installed "jasongrimes/paginator:~1.0" by CMD

但我仍然收到此错误Method Illuminate\Support\Collection::offset does not exist。知道我已经通过 CMD 安装了“jasongrimes/paginator:~1.0”

any help would be appreciated!

任何帮助,将不胜感激!

回答by Davit

Illuminate\Support\Collection::offset does not exist.it is because your $usersis instance of Illuminate\Support\Collection. For check it use dd(get_class($users));after $totalItems = $users->count();It must be print Illuminate\Support\Collection. Collection instance has count method, which return Collection items count. For your $users->offset( ( $currentPage - 1 ) * $itemsPerPage )->limit( $itemsPerPage )->get()code work right you must be change $users to $query(maybe $users)where $query(maybe $users)isntance of \Illuminate\Database\Query\Builder.
For this case use

Illuminate\Support\Collection::offset 不存在。这是因为您的$usersIlluminate\Support\Collection 的实例 。为了检查它使用dd(get_class($users)); $ TOTALITEMS = $用户- >计数(); 它必须是打印Illuminate\Support\Collection。Collection 实例具有 count 方法,该方法返回Collection items count。为了您的$users->offset( ( $currentPage - 1 ) * $itemsPerPage )->limit( $itemsPerPage )->get()代码正常工作,您必须将$users更改为 $query(maybe $users)where $query (也许$用户)的isntance \照亮\数据库\查询\生成器
对于这种情况使用

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

Your corrected code is

您更正的代码是

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]);
}

I delete $users = $query->get() method which is one more request in db. And for get total user count you used $totalItems = $query->count();which is more optimized query

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