Как я могу вывести текущую итерацию с помощью функции Laravel Paginate()?


Как я могу вывести текущую итерацию с помощью функции Laravel Paginate()?

05.04.2016 09:08:05 Просмотров 39 Источник

Приложение 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, идентификатор не будет правильно отражать текущий ранг. И если я сделаю что-то вроде цикла for(), то, когда я перейду на следующую страницу, он сбросит первый результат на второй странице до ранга 1, даже если это следующая страница.

Есть ли у Laravel особый способ достижения этой цели? Я просмотрел документы и не могу найти то, что ищу.

У вопроса есть решение - Посмотреть?

Ответы - Как я могу вывести текущую итерацию с помощью функции Laravel Paginate()? / How can I output the current iteration with Laravel's Paginate()?

nick.graziano

05.04.2016 09:18:14

Попробуйте что-нибудь вроде этого:

@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= в своем url-адресе. Если это не сработает, вы можете ввести эту переменную в свой контроллер.

Alexey Mezenin

05.04.2016 09:20:29

Вы можете получить номер первой строки текущей страницы:

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

А затем используйте эту переменную в простом цикле @for или просто сделайте $i++ в цикле @foreach.

Kristo

05.04.2016 09:29:33

Id дайте попробовать дополнительным помощникам:

https://laravel.com/docs/5.1/pagination > дополнительные вспомогательные методы

$result->currentPage()

С помощью этого метода вы наверняка сможете достичь того, что ищете

Является ответом!
Ashley Brown

05.04.2016 10:17:59

Я смог сделать это более элегантно, чем предложения, представленные с помощью метода 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
Помочь в развитии проекта:
Закрыть X