Help us understand the problem. What is going on with this article?

LaravelでbelongsToManyしてみた。2 <関連したタグを取得>

  1. 中間テーブルの構成を作成
  2. コレ
  3. タグから関連記事を取得

※基本的な内容は前回の記事にあるので、要参照です。

今回の追加 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

追加分のgitlink

belongsToMany型のオブジェクト取得からのタグ取得。

$tags = $twiiteRecord->tags()->orderby('tag_id')->get();
//インスタンスオブジェクトからorderby()->get()をして、中間テーブルに対応する
//タグのデータをすべて取得してきました。

要するに、attacheでやっていた扱い方と全く一緒。
getすればrecordが取得できるぜ。というお話です。

全件のタグを取得

foreachで回しているので、記事全件から一件ずつタグを見に行く。
さらにタグは複数あると想定されるので、(そうじゃなきゃやらないw)
タグの取得後に、記事のデータに付随させて送りたかったので、
foreachで回して、対応した記事に配列として追加。
あとはコメントアウトで細かく見てください。

direction1.jpg

別で送れますが、別で送ると、整合性がなくなる可能性がありますし、
何より細かい作業するようになると、一度に扱えた方が便利です。

タグを表示

cssは面倒なので書いてません。インラインで申し訳ない。。
記事の中に入れて持ってきたので、foreach内でタグの数だけ表示をしています。

次回は

次回は逆の取得をします。タグをクリックすると、その関連記事が出てくるようにしたいと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした