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
Method Illuminate\Support\Collection::offset does not exist
提问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 不存在。这是因为您的$users是Illuminate\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(); 这是更优化的查询