※基本的な内容は前回の記事にあるので、要参照です。
今回の追加 Controllerファイルindex内+index.blade.phpのみ
追加範囲全部↓
TwiiteController.php
public function index(Request $request)
{
$userId = Auth::id();//ログイン中のid
$twiiteList = $this->twiite->where('user_id',$userId)
->orderby('created_at','desc')
->get();//ツイート全件取得
+ foreach($twiiteList as $twiiteRecord){
+
+ $tags = $twiiteRecord->tags()->orderby('tag_id')->get();//中間テーブル経由でタグのrecordを取得
+
+ $tagName = [];
+ foreach($tags as $tagRecord){//タグも複数あるので、繰り返す。
+ $tagName[] = $tagRecord->name;//取得してきたレコードのid
+ }
+ $twiiteRecord['tags'] = $tagName;//送るデータに追加(同foreachで回すため)
+ }
return view('index', compact('twiiteList', 'userId'));//index view
}
index.php
<h1>ーーーあなたのツイート一覧ーーー</h1>
@foreach ($twiiteList as $twiite)
<div style="border: 1px solid #000; display: block; width: 400px; margin-top: 2px">
<p style="display: inline-block">{{ $twiite->contents }}</p>
</div>
+ @foreach($twiite->tags as $tag)
+ <p style="display: inline-block; margin-left: 10px; border: 1px solid #5fa; width: 100px">{{ $tag }}</p>
+ @endforeach
@endforeach
belongsToMany型のオブジェクト取得からのタグ取得。
$tags = $twiiteRecord->tags()->orderby('tag_id')->get();
//インスタンスオブジェクトからorderby()->get()をして、中間テーブルに対応する
//タグのデータをすべて取得してきました。
要するに、attacheでやっていた扱い方と全く一緒。
getすればrecordが取得できるぜ。というお話です。
全件のタグを取得
foreachで回しているので、記事全件から一件ずつタグを見に行く。
さらにタグは複数あると想定されるので、(そうじゃなきゃやらないw)
タグの取得後に、記事のデータに付随させて送りたかったので、
foreachで回して、対応した記事に配列として追加。
あとはコメントアウトで細かく見てください。
別で送れますが、別で送ると、整合性がなくなる可能性がありますし、
何より細かい作業するようになると、一度に扱えた方が便利です。
タグを表示
cssは面倒なので書いてません。インラインで申し訳ない。。
記事の中に入れて持ってきたので、foreach内でタグの数だけ表示をしています。
次回は
次回は逆の取得をします。タグをクリックすると、その関連記事が出てくるようにしたいと思います。
Comments