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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

1142閲覧

aravelで1対多のリレーションのページネーションのやり方

Mrk0916

総合スコア0

Laravel

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/10/03 16:55

前提・実現したいこと

laravelで1対多のリレーションのページネーションがうまく行きません。

発生している問題・エラーメッセージ

show.blade.phpに{{$comments->links()}}を定義した場合、Undefined variable $commentsが出ます。定義しなかった場合、コメントは五つだけになるのですが次のページに行くことができません。
またナビゲーションも表示されません。

色々試しましたが長いこと解決できてないのでわかる方いましたらぜひよろしくお願いします

該当のソースコード

laravel

1```in ProductController.php 2public function show(Product $product) 3 { 4 $comments = $product->setRelation('comments', $product->comments()->paginate(5)); 5 return view('products.show') 6 ->with(['product' => $product]); 7 } 8 9in show.blade.php 10@foreach ($product->comments()->paginate(5) as $comment) 11 <li> 12 {{ $comment->creation_date }} 13 {{ $comment->rate }} 14 {{ $comment->review }} 15 </li> 16 @endforeach 17 18### 試したこと 19 20設定する場所を変えたりしたのですがどれもうまくいかず 21 22Undefined variable $comments か 23method illuminate\database\eloquent\collection::paginate does not exist. 24のエラーが毎回生じされます。 25 26### 補足情報(FW/ツールのバージョンなど) 27 28laravel8.0

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

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

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

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

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

guest

回答1

0

Laravelを使用した開発を1年ほどしているものです。
私の知識だと、提示して頂いているコードだけですぐに判断はできないのですが…

①ProductController.phpでは「$comments」を定義しているので、viewにも「$comments」を渡さなければいけないのでは?

②ProductController.php の

$comments = $product->setRelation('comments', $product->comments()->paginate(5));

の直後にcommentsの内容をLogに出力する処理を入れてみたり、
view側でproductsの内容をconsole.logに出力するなどすれば何が原因なのかわかるかと思います。

投稿2021/10/04 01:54

MYas30

総合スコア29

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

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

Mrk0916

2021/10/04 21:25

ありがとうございます!! viewにコメントを渡してみてはいるのですが定義されていにと出てしまいます。。。
MYas30

2021/10/05 01:29

return view('products.show') ->with(['product' => $product]); なので、productであれば定義されているのではないでしょうか。 $comments = $product->setRelation('comments', $product->comments()->paginate(5)); だと、$commentsは定義されても$product->commentsは定義されていないのでは
Mrk0916

2021/10/05 07:33

すみません。どうやって定義したらよろしいのでしょうか?色々試してはいるのですが同じエラーが続いて解決できないです。。。宜しくお願いします
MYas30

2021/10/07 02:56

in ProductController.php public function show(Product $product) { $comments = $product->setRelation('comments', $product->comments()->paginate(5)); return view('products.show') ->with(['comments' => $comments]); } in show.blade.php @foreach ($comments as $comment) <li> {{ $comment->creation_date }} {{ $comment->rate }} {{ $comment->review }} </li> @endforeach こんな感じでどうでしょう。 試してないので何かしらエラーは出るかと思いますが。
Mrk0916

2021/10/07 15:59

そのようにやったところ機能しました。大変ありがとうございました!!
MYas30

2021/10/08 01:32

よかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問