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

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

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

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

PHP

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

Q&A

解決済

1回答

3862閲覧

laravel bladeでforeachの回数を指定したい

creative_09

総合スコア80

Laravel

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

PHP

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

0グッド

0クリップ

投稿2020/08/05 04:29

laravelでモデルのリレーションを組んでいますが、
blade上のみで、foreachで回数を指定し、最新の3件のみを表示させたいです。

以下のようにして実現できているのですが、
@phpを使っており、もっと簡単、かつ@phpを使わない方法でforeachに回数を指定できないか悩んでおります
なにか方法はあるのでしょうか?
よろしくおねがいします

@php $i = 0 @endphp @forelse($user->productComments as $productComment) @if($i >= 3) @break @endif <div class=""> @if($productComment->body) </div> @php $i++ @endphp @empty <p class="text-center">まだありません。</p> @endforelse

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

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

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

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

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

guest

回答1

0

ベストアンサー

単にデータ取得時に3件だけ取得してくるように組めばblade上でゴチャゴチャせずに済むのでは。
結果、使わないデータを保持する必要もなくなりパフォーマンスにも良い影響が出ます。

View上にロジックを組むのは最小限におさえるべきです。まず組まなくて良い方法から検討してください。

投稿2020/08/05 04:43

m.ts10806

総合スコア80875

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

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

creative_09

2020/08/05 05:00

コントローラー側で3件のみを取得してくるということでしょうか? もともとリレーションで紐付いており、userを取得すればcommentは取得できておりますので コントローラー側ではuserしか取得する処理は書いておりません。 コントローラー側でcomment3件を取得し、viewに渡し、bladeで表示させた場合、 新たにコントローラー側で処理を追加するような動きになるかと思い、 リレーションで紐付いてるならそこから取得すればいいや!というふうに考えてしまいました。 foreachで回すだけなので。そこで最新3件の場合・・・・となったわけですが パフォーマンス的にも余分なデータは持たないほうがいいですね。 やはりコントローラー側で処理を作ったほうが良いのでしょうか・・・
m.ts10806

2020/08/05 05:15

通常は必要なデータだけ取得します。 表示用に加工が必要ならそれも加工したものをviewに渡します。
creative_09

2020/08/05 05:25

必要な情報としてすべてのコメントを取得しているのでやはり、それを3件のみを必要情報としてコントローラーで処理しviewへ渡すという流れですね。 コントローラー側で絞り込みの処理を追記 viewへ渡す この流れですね ありがとうございます。
m.ts10806

2020/08/05 06:08

$loop変数というのは存在しますが、今回のケースのために使われるものではないかと思います。 Viewは簡潔に、単に表示だけさせたほうが役割に合っていますし可読性も良く、問題切り分けがしやすくなります。現時点のコードも既にグチャグチャになってますしね。 viewでやろうとするのが間違いです。
creative_09

2020/08/05 07:08

ありがとうございます。 おっしゃるとおり、コントローラー側で3件分の処理を追記する形で書き換え用と思います。 最後まで付き合って頂きありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問