[英]How can I output the current iteration with Laravel's Paginate()?
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
我怎么能输出当前的行顺序迭代?
例如
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 是否有实现这一目标的特定方法? 我浏览了文档,但找不到我要找的东西。
我能够比通过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
您可以获得当前页面的第一行号:
$firstRowOnThisPage = $results->currentPage() * $results->perPage() - $results->perPage() + 1;
然后在简单的@for
循环中使用这个变量,或者在@foreach
循环中执行$i++
。
尝试这样的事情:
@foreach ($results as $index => $result)
<tr>
<td>{{ (Input::get('page', 1) - 1) * $results->getPerPage() + $index + 1 }}</td>
<td>{{ $result->name }}<td>
//etc...
</tr>
@endforeach
这仅在您在 url 中使用?page=
时才有效。 如果这不起作用,您可以在控制器中注入该变量。
我会尝试一下其他助手:
https://laravel.com/docs/5.1/pagination > 其他辅助方法
$result->currentPage()
使用这种方法,您肯定可以实现您想要的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.