@dmytrotus

Как присвоить номер пользователю по рейтингу и вывести в blade?

Привет всем.
Есть проект на laravel
Вот миграция БД
Schema::create('gamers', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('nick');
            $table->string('time');
            $table->timestamps();
        });

Вот контроллер
public function index()
    {
    	return view('game')
    	->with('gamers', Gamer::all());
    }

Такой blade
<table class="table table-striped">
  <thead>
    <tr>
      <th scope="col">Позиция</th>
      <th scope="col">Nick</th>
      <th scope="col">Время</th>
      <th scope="col"></th>
    </tr>
  </thead>
  <tbody>
  @foreach ($gamers as $g)
    <tr>
      <th scope="row">1</th>
      <td>{{ $g->nick }}</td>
      <td>{{ $g->time }}</td>
      <td></td>
    </tr>
  @endforeach
  </tbody>
</table>

Мне нужно выводить позицию в рейтинге и сортировать пользователей по очереди

тоесть у кого меньше time тот выше в рейтинге и у того номер 1,
и так даллее.
Подскажите, как можно такое сделать?
Что-то мысли в голову не идут.

Помню что есть метод sortBy() и можно сделать так
@foreach ($gamers->sortBy('time') as $g)
    <tr>
      <th scope="row">1</th> //// но как менять тут 1,2,3,4 внутри foreach
      <td>{{ $g->nick }}</td>
      <td>{{ $g->time }}</td>
      <td></td>
    </tr>
  @endforeach

Но как менять тут 1,2,3,4 внутри foreach
  • Вопрос задан
  • 124 просмотра
Пригласить эксперта
Ответы на вопрос 2
Fragster
@Fragster
помогло? отметь решением!
Во первых, в контроллере можно получить сразу отсортированные данные:
public function index()
    {
    	return view('game')
    	->with('gamers', Gamer::orderBy('time', 'desc')->get()); // ну или создать дефолтный отсортированный скоуп, если это всегда требуется
    }

Во вторых,
@foreach ($gamers as $index=>$g)
    <tr>
      <th scope="row">{{$index + 1}}</th>
      <td>{{ $g->nick }}</td>
      <td>{{ $g->time }}</td>
      <td></td>
    </tr>
  @endforeach
Ответ написан
edward_freedom
@edward_freedom
{{ $index = 0 }}
@foreach ($gamers->sortBy('time') as $g)
    <tr>
      <th scope="row">{{ $index++ }}</th>
      <td>{{ $g->nick }}</td>
      <td>{{ $g->time }}</td>
      <td></td>
    </tr>
  @endforeach
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы