質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.82%

Laravel+MySQLで検索しページネーションした際に通し番号をつけたい

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 747

taiyo-2017

score 43

Laravelでページネーションを行う際に、件数の通し番号を付与したいです。

$query = DB::table('plans')->select('tests.*');
$list = $query->paginate(3);
<table>
@foreach ($list as $row)
 <tr><td>{$row->name}</td></tr>
@endforeach
</table>


とすることで名前リストを3件ごとに表示することができたのですが、
|AAA|
|BBB|
|CCC|
となっているところを
|1|AAA|
|2|BBB|
|3|CCC|
↑のように通し番号をつけたいと考えています。
ページネーションを使用しても2ページ目が
|4|AAA|
|5|BBB|
|6|CCC|
となるようにしたいのですが、Laravelでの機能などはあるのでしょうか?
ないのであれば実装例等を教えていただければと思います。

よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+2

検索結果の連番表示しても意味はないので試したことはないけど
$results->firstItem()現在ページの最初のアイテムが何番目か取得
https://readouble.com/laravel/5.8/ja/pagination.html#paginator-instance-methods
とループ変数を組み合わせれば可能かも。
https://readouble.com/laravel/5.8/ja/blade.html#the-loop-variable

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/24 12:51

    回答ありがとうございます!
    ループ変数というものが存在するのですね、Laravelの知識が無いので初めて知りました。無事に表示することができました。
    なるほど!となり、考え方?が分かりやすかったことと回答を早くいただいたのでベストアンサーにさせていただきます。ありがとうございます!

    キャンセル

+1

<table>
@foreach ($list as $row)
 <tr><td>{{ $list->firstItem() + $loop->index }}</td></tr>
 <tr><td>{{ $row->name }}</td></tr>
@endforeach
</table>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/24 12:48

    回答ありがとうございます!
    コードまで書いていただいたのでとても参考になりました。

    キャンセル

0

使ったことないんでわからないですがリファレンスにはその値を直接取る方法はないみたいなので
別の実現方法としては
①レコードにno等のカラムを持たせる
②$results->currentPage()で現在のページ番号を取得して

1ページあたりの表示数 x (現在のページ番号 - 1) + 1

がそのページの最初の番号になると思

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/24 12:54

    早い回答ありがとうございます!
    考え方は合っていたのですが、実装方法が分からなかったのでまたこれから勉強していこうと思います。

    キャンセル

0

hanhunhunさんのやり方でも出来ると思いますが一応別案。
未検証ですがこんな感じでいけませんかね?
(DBの返り値はCollection型なので、putでキーと値を追加する)
コレクション 5.8 Laravel

$query = DB::table('plans')->select('tests.*');
for ($i = 0; $i <= $query->count(); $i++) {
    $query->put('num', $i);
}
$list = $query->paginate(3);


//表示側
<table>
@foreach ($list as $row)
 <tr><td>{$row->num}</td><td>{$row->name}</td></tr>
@endforeach
</table>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/24 12:53

    回答ありがとうございます。
    sql実行時に連番をとる方法もあるのですね。とても勉強になりました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.82%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る