在laravel 5.2中使用有限记录的分页

时间:2017-03-06 05:43:56

标签: pagination laravel-5.2 take

我正在尝试对12条记录使用paginate方法。我需要12个结果,其中前6个结果出现在第一页,其余6个结果出现在第二页。我在控制器中使用了以下代码,

$collection = User::take(12)->whereHas('roles', function($q) {
            $q->where('slug', 'member');

        }
        )->where('status','1')->OrderBy('last_login','desc');

我使用take()来获取12条记录,并使用paginate(6)在一页中显示6条结果,

$collection = $collection->paginate(6);
return View('preferred_matches')->with(array('collection'=>$collection));

在我看来,我提供了这样的链接,

{{ $collection->links() }}

但是(12)没有用。每个页面中显示6个结果,但显示的结果超过12个。如何使用有限的记录进行分页。提前谢谢。

3 个答案:

答案 0 :(得分:2)

Laravel不支持对其默认分页的限制,但如果可以通过以下步骤对分页进行限制:

首先在模型中创建静态方法(假设用户模型)

第一步:在用户模型

的命名空间后添加这两行
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection;

第二步:在用户模型中输入以下方法

public static function customPaginate($items,$perPage)
{
    //Get current page form url e.g. &page=6
    $currentPage = LengthAwarePaginator::resolveCurrentPage();

    //Create a new Laravel collection from the array data
    $collection = new Collection($items);

    //Define how many items we want to be visible in each page
    $perPage = $perPage;

    //Slice the collection to get the items to display in current page
    $currentPageSearchResults = $collection->slice($currentPage * $perPage, $perPage)->all();

    //Create our paginator and pass it to the view
    $paginatedSearchResults = new LengthAwarePaginator($currentPageSearchResults, count($collection), $perPage);

   return $paginatedSearchResults;
}

第三步:在路由或控制器中输入代码以查看结果(假设在routes.php中)

Route::get('/', function(){
   $users = DB::table('users')->limit(20)->get();
   $paginated_result = App\User::customPaginate($users,3);
   //dd($paginated_result);
   return view('show')->with('paginated_result',$paginated_result);
});

希望它会起作用。

答案 1 :(得分:0)

只是稍微更新一下上一个答案,如果集合小于perPage参数,则存在一个小错误,items数组为空,可以通过替换来修复:

$currentPageSearchResults = $collection->slice($currentPage * $perPage, $perPage)->all();

通过

$currentPageSearchResults = ($items->count() > $perPage) ? $collection->slice($currentPage * $perPage, $perPage)->all() : $collection->all();

在静态函数中。 谢谢你@sabuz! ;)

答案 2 :(得分:0)

关于上一个答案的另外一个更新,如果您尝试访问“最后一页”的数据,它将带来一个空结果,要解决此问题,您只需更改此行:

$currentPage = LengthAwarePaginator::resolveCurrentPage();

这两个:

$currentPage = LengthAwarePaginator::resolveCurrentPage(); $currentPage = $currentPage - 1;

我希望它有助于某人...