Laravel 5.2应用程序
我的控制器中有一个函数,它用order by子句查询我的DB,然后我将其分页。
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是否有具体的方法来实现这一点?我已经看过文档了,我找不到我要找的东西。
6条答案
按热度按时间rjee0c151#
您可以获取当前页面的第一个行号:
然后在一个简单的
@for
循环中使用这个变量,或者在一个@foreach
循环中执行$i++
。atmip9wb2#
试试这样的东西:
这将只工作,如果您使用的
?page=
在您的网址。如果这不起作用,您可以将该变量注入到控制器中。7uhlpewt3#
我会给予额外的助手一个尝试:
https://laravel.com/docs/5.1/pagination>辅助器的其他方法
用这种方法你一定能达到你所追求的
chhkpiq44#
我的解决方案是
它为我工作
cfh9epnr5#
@foreach($results as $index => $result){{(Input::get('page ',1)- 1)* $results->firstItem()+ $index }} {{ $result->name }}//等等...@endforeach
zu0ti5jz6#
我能够比通过
firstItem()
方法提供的建议更优雅地完成这一点。