您好我正在尝试对我的视图进行分页,并且我的控制器中有以下代码用于分页:
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”
任何帮助将不胜感激!
答案 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(); 这是更优化的查询