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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

Q&A

解決済

1回答

1317閲覧

ページネーションが機能しない

kuwabaraakinori

総合スコア10

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

0グッド

0クリップ

投稿2020/07/19 03:32

編集2020/07/19 06:14

前提・実現したいこと

ペジネーションが機能しません。例えば、paginate(5)として投稿が10個あっても
5つしか一覧に表示されません。
ご教示いただけたら幸いです。

該当のソースコード

ContentController

1namespace App\Http\Controllers; 2 3use Illuminate\Http\Request; 4use App\Http\Requests\ContentRequest; 5use App\Content; 6 7class ContentController extends Controller 8{ 9 10 public function index() 11 { 12 13 $contents = Content::orderby('created_at' , 'desc')->paginate(10); 14 15 return view("welcome" , [ 16 "contents"=>$contents 17 ]); 18 }

contents.blade.php

1<div class="container-fluid"> 2 <div class="row"> 3 <div class="col-sm-6"> 4 @foreach($contents as $content) 5 <div class="card" style="width: 25rem;"> 6 <svg class="bd-placeholder-img card-img-top" width="100%" height="180" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid slice" focusable="false" role="img" aria-label="Placeholder: Image cap"><title>Placeholder</title><rect fill="#868e96" width="100%" height="100%"/><text fill="#dee2e6" dy=".3em" x="50%" y="50%">Image cap</text></svg> 7 <div class="card-body"> 8 <h5 class="card-title">{{ $content->title }}</h5> 9 <p class="card-text">{{ $content->content }}</p> 10 </div> 11 <ul class="list-group list-group-flush"> 12 <li class="list-group-item">大陸名:{{ $content->continent}}</li> 13 <li class="list-group-item">国名:{{ $content->country }}</li> 14 <li class="list-group-item">費用:¥{{ $content->costs }}</li> 15 <li class="list-group-item">滞在期間:{{ $content->span }}日間</li> 16 </ul> 17 <div class="card-body"> 18 <a href="{{route("content.show" , $content->id) }}" class="btn btn-primary">詳細</a> 19 @if(Auth::id() == $content->user_id) 20 {!! link_to_route('content.edit', '編集', $content->id, ['class' => 'btn btn-success']) !!} 21 {!! Form::open(['route' => ['content.destroy', $content->id], 'method' => 'delete']) !!} 22 {!! Form::submit('削除', ['class' => 'btn btn-danger']) !!} 23 {!! Form::close() !!} 24 @endif 25 </div> 26 </div> 27 @endforeach 28 </div> 29 </div> 30</div>

create_contents_table.php

1<?php 2 3use Illuminate\Database\Migrations\Migration; 4use Illuminate\Database\Schema\Blueprint; 5use Illuminate\Support\Facades\Schema; 6 7class CreateContentsTable extends Migration 8{ 9 /** 10 * Run the migrations. 11 * 12 * @return void 13 */ 14 public function up() 15 { 16 Schema::create('contents', function (Blueprint $table) { 17 $table->bigIncrements('id'); 18 $table->unsignedBigInteger('user_id'); 19 $table->string('title' , 50); 20 $table->string('continent'); 21 $table->string('country'); 22 $table->string('picture'); 23 $table->string('content' , 250); 24 $table->integer('costs'); 25 $table->integer('span'); 26 $table->timestamps(); 27 28 //外部キー制約 29 $table->foreign('user_id')->references('id')->on('users'); 30 }); 31 32 } 33 34 /** 35 * Reverse the migrations. 36 * 37 * @return void 38 */ 39 public function down() 40 { 41 Schema::dropIfExists('contents'); 42 } 43} 44

試したこと

公式ページやqiitaで探してみましたが、答えが見つけられませんでした。

補足情報(FW/ツールのバージョンなど)

Laravel6.0

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/07/19 03:50

どのあたりを参考にしたのかリンクで提示願います。 ただ、5にしたのなら5件だけとってくるので5件しかでないのは当然ではないかと…
kuwabaraakinori

2020/07/19 04:40

10件あるうちpaginate(5)で5ページごとに分かれるのではないのでしょうか?
kuwabaraakinori

2020/07/19 04:49

すいません、5つを1ページごとの間違えです。
m.ts10806

2020/07/19 05:20

>5つを1ページごとの間違えです。 1ページ5件です。 提示されたページにも「ページごとに15アイテムを」と書いています。 つまり投稿件数が10件で5を渡せば1ページ5件表示され、2ページのペジネーションになります。 2ページ目に遷移すると残りの5件が表示されます。
kuwabaraakinori

2020/07/19 05:29

はい。 ただいま合計で8投稿しているのですが、例えば、$contents = Content::orderby('created_at' , 'desc')->paginate(4); としても一覧には4件しか表示されません。 これはほかに原因があるのでしょうか?
m.ts10806

2020/07/19 05:32

「1ページに表示する件数」を指定してるので、何も問題起きてませんよ。8投稿(全データ数が8件でいいですよね)で4なら1ページに表示されるのは4件です。 引数を8以上にすれば1ページに全て出るはずです。
kuwabaraakinori

2020/07/19 05:35

はい、すべてで8投稿です。 しかし、(4)なら1ページに表示されるのは4件で、次の2ページ目にまた4件表示されると思うのですが、それが表示されず、結果1ページ目に4件しか表示されていない状況です。
m.ts10806

2020/07/19 05:40

「2ページ目」をどのようにアクセスしてるのでしょうか。URLも提示してください。 その8データはどういうデータですか? いずれにしても、質問本文に追記してください。
kuwabaraakinori

2020/07/19 06:21

すいません、paginateをしたら勝手にページが区分けされると思っており、2ページ目をどのようにしてアクセスしているのか知識不足もそうですが、分かりません。 8データは新しく情報を追加しました。
m.ts10806

2020/07/19 06:28

んー。提示のLaravel6のマニュアルに書いてありますね。 「pageクエリ文字列」は「getパラメータのpageキー」のことです。 URLに?page=1でアクセスしたら1ページ目。 あと、自動でリンク生成するやり方も書いてありますね。 「よくあるペジネーションがどうなっているか」イメージがわいているかどうかになります。 取得するデータは既に区分けされていますが、他のページにアクセスするためのページリンクを出力するような記述が必要ですが、Laravelの機能があるので使ってください。 提示されたリンクに自動と独自、両方について言及されています。
kuwabaraakinori

2020/07/19 06:47

{{ $contents->links() }}がぬけていました。 ご教授いただきありがとうございました。 もう一度公式サイトを読み直したいと思います。
guest

回答1

0

ベストアンサー

念のため回答しておきます。
ペジネーションのリンクを設置しましょう。実装が足りていないということですね。
ご自身が提示されたドキュメントページの「ペジネーション結果の表示」の項などを参考に、viewに設置してください。

あと、「クエリ文字列」などの理解はしておいた方が良いので、別途調べて置いてください。

teratailにもGoogleにもペジネーションは採用されていますし、ページ遷移したときにURLがどうなっているかとか、挙動を確認しておくと良いかと思います。

投稿2020/07/19 06:35

m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問