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

nwwlzxa7  于 2023-06-20  发布在  PHP
关注(0)|答案(6)|浏览(130)

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是否有具体的方法来实现这一点?我已经看过文档了,我找不到我要找的东西。

rjee0c15

rjee0c151#

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

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

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

atmip9wb

atmip9wb2#

试试这样的东西:

@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=在您的网址。如果这不起作用,您可以将该变量注入到控制器中。

7uhlpewt

7uhlpewt3#

我会给予额外的助手一个尝试:

https://laravel.com/docs/5.1/pagination>辅助器的其他方法

$result->currentPage()

用这种方法你一定能达到你所追求的

chhkpiq4

chhkpiq44#

我的解决方案是

<td>{{$customer->currentPage() * $customer->perPage() - $customer->perPage() + 1 +$loop->index}}</td>

它为我工作

cfh9epnr

cfh9epnr5#

@foreach($results as $index => $result){{(Input::get('page ',1)- 1)* $results->firstItem()+ $index }} {{ $result->name }}//等等...@endforeach

zu0ti5jz

zu0ti5jz6#

我能够比通过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

相关问题