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

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

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

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

12649閲覧

laravelでデータを並び替えしてbladeで表示する方法

KeisukeNebashi

総合スコア18

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

1クリップ

投稿2018/11/06 00:30

*前提、実現したいこと
現在、オリジナルアプリの制作をしています。
内容は趣味に関するコミュニティがたくさんあり、ユーザーは好きなコミュニティに参加することができ、そのコミュニティ内で自由にツイートをすることができるアプリです。

実現したいことは、コミュニティ内でユーザーがツイートしていることをタイムラインで表示させているのですが、それを新しい順で表示させたいです。

テーブル設計
communityテーブル
コミュニティが格納されています。

tweetsテーブル
みんなのツイートが格納されています。

*つまづいていること
タイムライン上で古いツイートから表示されているのですが、新しい順にすることができないです。

php

1public function timeline($id) 2 { 3 $tweets = Tweet::orderBy('id', 'DESC') 4 ->get(); 5 6 return view('admin.app.timeline', ['community' => Community::find($id)]); 7 } 8

php

1@if ($community->tweets != NULL) 2 @foreach ($community->tweets as $tweet) 3 <div class="list-group-item"> 4 <h5>{{ $tweet->user->name }}</h5> 5 <p>{{ $tweet->created_at }}</p> 6 <p>{{ $tweet->content }}</p> 7 <a href="{{ action('Admin\AppController@comment',['id' => $tweet->id]) }}" role=button class="btn btn-primary">コメントする</a> 8 <a href="{{ action('Admin\AppController@list', ['id' => $tweet->id]) }}">返信一覧</a> 9 </div> 10 @endforeach 11 @else 12 <p>つぶやきはありません</p> 13 @endif

controllerとbladeのコードは上記のようになっています。

controllerの$tweet~で並び替えは出来ていると思ったのですが、、、

以下のようなコードも試してみましたが、ダメでした。

php

1public function timeline($id) 2 { 3 $tweets = DB::table('tweets') 4 ->orderBy('id', 'desc') 5 ->get(); 6 7 return view('admin.app.timeline', ['community' => Community::find($id)], ['tweets' => $tweets]); 8 }

*補足
言語 php
フレームワーク laravel
DB mysql

どなたかアドバイスをいただきたいです。
よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

timeline()関数の中でそれを行っても、全ツイートをorderByして取得して変数に入れて捨てているだけで、テンプレートの中で使っている$community->tweetsにはなんの効果も及ぼしません。

この場合は、マニュアル「Eloquent:リレーション」の「リレーションのクエリ」のところにかいてあるやり方を使うのがいいでしょう。@foreach ($community->tweets as $tweet)のかわりに@foreach ($community->tweets()->orderBy('id', 'desc')->get() as $tweet)とします。

また、

blade

1@if ($community->tweets != NULL) 2 @foreach ($community->tweets as $tweet) 3 ... 4 @endforeach 5@else 6 <p>つぶやきはありません</p> 7@endif

という書き方は$community->tweetsが2回使われていて冗長なので、@forelseを使いましょう。

以上2点を直して最終的にはこんな感じになります。

blade

1@forelse ($community->tweets()->orderBy('id', 'desc')->get() as $tweet) 2 ... 3@empty 4 <p>つぶやきはありません</p> 5@endforelse

投稿2018/11/06 02:38

crhg

総合スコア1175

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

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

KeisukeNebashi

2018/11/06 04:04

controllerに書かないといけないとばかり、思っておりました。 無事表示することができました。 丁寧な説明ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問