问题
I have used Paginator::make
to paginate the records in the table. In the view, I am getting the pagination links, but every link has all the records in it. How to restrict it to perPage
items?
$datas = Paginator::make($paginator, count($paginator), $perPage);
return $datas;
The code outputs:
{"total":10,"per_page":5,"current_page":1,"last_page":2,"from":1,"to":5,"data":
[{"id":"10","languages":"ds","created_at":"2014-05-23
11:59:02.000","created_by":"1","updated_at":"2014-05-23
11:59:02.000","updated_by":"1","is_active":"1"},
{"id":"9","languages":"urdu","created_at":"2014-05-23
11:57:24.000","created_by":"1","updated_at":"2014-05-23
11:57:24.000","updated_by":"1","is_active":"1"},
{"id":"8","languages":"were","created_at":"2014-05-23
11:55:49.000","created_by":"1","updated_at":"2014-05-23
11:55:49.000","updated_by":"1","is_active":"1"},
{"id":"7","languages":"delete","created_at":"2014-05-23
11:54:57.000","created_by":"1","updated_at":"2014-05-24
06:02:46.000","updated_by":"1","is_active":"1"},
{"id":"6","languages":"sdf","created_at":"2014-05-23
11:53:11.000","created_by":"1","updated_at":"2014-05-23
11:53:11.000","updated_by":"1","is_active":"1"},
{"id":"5","languages":"dada","created_at":"2014-05-23
11:51:33.000","created_by":"1","updated_at":"2014-05-24
05:44:34.000","updated_by":"1","is_active":"1"},
{"id":"4","languages":"English","created_at":"2014-05-23
11:49:49.000","created_by":"1","updated_at":"2014-05-23
11:49:49.000","updated_by":"1","is_active":"1"},
{"id":"3","languages":"asdfgf","created_at":"2014-05-23
11:48:20.000","created_by":"1","updated_at":"2014-05-23
11:48:20.000","updated_by":"1","is_active":"1"},
{"id":"2","languages":"Tamil","created_at":"2014-05-23
10:55:50.000","created_by":"1","updated_at":"2014-05-23
10:55:50.000","updated_by":"1","is_active":"1"},
{"id":"1","languages":"Tamil","created_at":"2014-05-23
10:51:42.000","created_by":"1","updated_at":"2014-05-26
04:41:27.000","updated_by":"1","is_active":"1"}]}
回答1:
Actually Paginator::make function we need to pass only the required values instead of all values. Because paginator::make function simply displays the data send to it. To send the correct offset paginated data to the paginator::make, the following method should be followed
$paginator = json_decode($response);
$perPage = 5;
$page = Input::get('page', 1);
if ($page > count($paginator) or $page < 1) { $page = 1; }
$offset = ($page * $perPage) - $perPage;
$articles = array_slice($paginator,$offset,$perPage);
$datas = Paginator::make($articles, count($paginator), $perPage);
Hope this will help someone...
回答2:
Paginator::make()
This function only creates the paging system. To restrict your data for each page you have to do some changes to your query. Here is an example.
$pageNo = Input::get('page', 1);
$perPage = 10;
$from = $pageNo*$perPage-$perPage;
$to = $perPage;
$data['allData'] = DB::select( DB::raw('SELECT * FROM tablename LIMIT '.$from.','.$to));
$totalData = DB::select( DB::raw('SELECT * FROM tablename'));
$data['paginator'] = Paginator::make($data['allData'], count($totalData), $perPage);
Then you can show the data to your view page
回答3:
You should load a view
and pass the $datas
to that view
using something like this:
return View::make('viewname')->with('datas', $datas);
Then in your view
loop all the models in $datas
and print out the links
, for example:
foreach($datas as $data) {
echo $data['propertyname']; // $data['username'];
}
Finally print the links:
echo $data->links();
If you are using Blade
then use {{ $data['propertyname'] }}
and {{ $data->links() }}
instead of echo
and also change foreach
, check here for more. Also make sure you have used the right viewname
in make(...)
because the viewname
passed in the make(...)
method wull be loaded from app/views
folder by default.
来源:https://stackoverflow.com/questions/23870493/how-to-use-paginatormake-in-laravel-to-show-resultset-in-view