Php 方法\Support\Collection::offset不存在
您好,我正在尝试对视图进行分页,我的控制器中有以下用于分页的代码:Php 方法\Support\Collection::offset不存在,php,laravel,laravel-5,laravel-4,eloquent,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')
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还有以下用于分页的代码:
<form>
....
</form>
<table>
@foreach($users as $row)
....
@endforeach
</table>
echo $paginator;
....
@foreach($users作为$row)
....
@endforeach
echo$paginator;
但是我仍然得到这个错误方法illumb\Support\Collection::offset不存在。知道我已经通过CMD安装了“jasongrimes/paginator:~1.0”
任何帮助都将不胜感激 照明\Support\Collection::offset不存在。这是因为您的$users是照明\Support\Collection的实例。对于检查,使用dd(get_class($users))在$totalItems=$users->count()之后必须是打印照明\Support\Collection。集合实例具有count方法,该方法返回集合项计数。要使您的$users->offset(($currentPage-1)*$itemsPerPage)->limit($itemsPerPage)->get()代码正常工作,您必须将$users更改为$query(可能$users)其中$query(可能$users)是\lightlight\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();哪个查询更优化控制器中的
$users
查询是什么?完整显示您的代码。Laravel 4或Laravel 5,选择一个。在$donner code之前,什么是dd(get_class($user)),它被打印为Illumb\Support\Collection;可以将偏移值设置为0@MehdiAlipour我刚刚用我的控制器配置文件controller.phpSo的完整代码更新了我的帖子。你认为我的代码应该改为:*$donner=$query->get()->offset(($currentPage-1)*$itemsPerPage)->limit($itemsPerPage)->get();**??当您使用$query->get()时,它将返回illumb\Support\Collection类的实例。->get()方法必须在queryHi结束时使用,因为错误最终消失了!谢谢你,伙计!但仍然有一个问题是echo$paginator;在我的视图中调用不起作用,它在我的视图中按原样显示,并且不返回分页!你知道怎么解决这个问题吗?我没有使用Paginator类。在这种情况下,我帮不了你。看官方文件,它一定对你有帮助