質問: DB::table('tweets') ->orderBy('id', 'desc') ->get(); return view('admin.app.timeline', ['community' => Community::find($id)], ['tweets' => $tweets]); } ``` *補足 言語 php フレームワーク laravel DB mysql どなたかアドバイスをいただきたいです。 よろしくお願い致します。
回答: `timeline()`関数の中でそれを行っても、全ツイートをorderByして取得して変数に入れて捨てているだけで、テンプレートの中で使っている`$community->tweets`にはなんの効果も及ぼしません。 この場合は、マニュアル「Eloquent:リレーション」の「リレーションのクエリ」のところにかいてあるやり方を使うのがいいでしょう。`@foreach ($community->tweets as $tweet)`のかわりに`@foreach ($community->tweets()->orderBy('id', 'desc')->get() as $tweet)`とします。 また、 ``` @if ($community->tweets != NULL) @foreach ($community->tweets as $tweet) ... @endforeach @else つぶやきはありません @endif ``` という書き方は`$community->tweets`が2回使われていて冗長なので、`@forelse`を使いましょう。 以上2点を直して最終的にはこんな感じになります。 ``` @forelse ($community->tweets()->orderBy('id', 'desc')->get() as $tweet) ... @empty つぶやきはありません @endforelse ```