如何使用Laravel的Paginate()输出当前迭代?

时间:2016-04-05 18:08:06

标签: php mysql laravel pagination laravel-5.2

Laravel 5.2应用程序。

我的控制器中有一个函数,它使用order by子句查询我的数据库,然后我将其分页。

public function foo() {

  $results = DB::orderBy('name', 'desc')->paginate(15);
  return view('index', ['results' => $results]);

}

index.blade.php

@foreach ($results as $result)
 <tr>
  <td>{{ //current $result position is what I need }}</td>
  <td>{{ $result->name }}<td>
  //etc...
 </tr>
@endforeach

如何输出当前的行顺序迭代?

e.g。

Rank | name | //page 1
1      bob  
2      john
3      katie
Rank | name | //page 2
4      dave  
5      michael
6      ruben

通常我会输出id,但由于我有一个orderBy子句,因此ID不能正确反映当前的排名。如果我执行类似for()循环的操作,那么当我转到下一页时,它将重置第二页上的第一个结果,排名为1,即使它是下一页。

Laravel是否有特定的方法来实现这一目标?我查看了文档,但我找不到我要找的内容。

4 个答案:

答案 0 :(得分:2)

我能够比通过firstItem()方法提供的建议更优雅。

public function foo() {

  $results = DB::orderBy('name', 'desc')->paginate(15);

  $rank = $results->firstItem();

  return view('index', ['rank' => $rank, 'players' => $players]);

}


index.blade.php

@foreach ($results as $result)
 <tr>
  <td>{{ $rank++ }}</td>
  <td>{{ $result->name }}<td>
  //etc...
 </tr>
@endforeach

答案 1 :(得分:1)

您可以获取当前页面的第一行编号:

$firstRowOnThisPage = $results->currentPage() * $results->perPage() - $results->perPage() + 1;

然后在简单的@for循环中使用此变量,或者只在$i++循环中执行@foreach

答案 2 :(得分:0)

尝试这样的事情:

@foreach ($results as $index => $result)
 <tr>
  <td>{{ (Input::get('page', 1) - 1) * $results->getPerPage() + $index + 1 }}</td>
  <td>{{ $result->name }}<td>
  //etc...
 </tr>
@endforeach

这仅适用于您在网址中使用?page=的情况。如果这不起作用,您可以在控制器中注入该变量。

答案 3 :(得分:0)

我试试其他助手:

https://laravel.com/docs/5.1/pagination&gt;其他助手方法

$result->currentPage()

使用这种方法,您一定可以实现您的目标