【Laravel7】belongsTo結合で、関連付けているテーブルのレコードを取り出す。

掲示板サイトで、usersテーブルとpostsテーブルがあるとする。

1人のユーザーに対し、複数の投稿を持つので、関係性は、ユーザーが主で投稿が従である。

従の方に、外部キー(ex = user_idレコード)を設定する。

モデルの関連付けの方法

User.php

    public function post()
   {
       // ユーザーは複数の投稿を持つ
       return $this->hasMany('App\Post');
   }

Post.php

    public function user()
   {
       // 投稿は1つのユーザーに所属する
       return $this->belongsTo('App\User');
   }
   
   // userテーブルからnameを取り出すメソッドを作る。
   public function getUserName()
   {
       return $this->user->name;
   }

View/index.blade.php

        @foreach ($posts as $post)
           <tr>
               <td>{{ $post->id }}</td>
               <td>{{ $post->category->name }}</td>
               <td>{{ $post->created_at->format('Y.m.d') }}</td>
               
               
               <!-- Post.phpで作ったgetUserNameメソッドで、ユーザー名を取得する。 -->
               <td>{{ $post->getUserName() }}</td>
               
               
               <td>{{ $post->subject }}</td>
               <td>・{{ $post->body1 }}<br>
                   ・{{ $post->body2 }}<br>
                   ・{{ $post->body3 }}</td>
               <td>{!! nl2br(e(Str::limit($post->message, 100))) !!}
                   @if ($post->comments->count() >= 1)
                   <p><span class="badge badge-primary">コメント:{{ $post->comments->count() }}件</span></p>
                   @endif
               </td>
               <td class="text-nowrap">
                   <p><a href="{{ action('PostsController@show', $post->id) }}" class="btn btn-primary btn-sm">詳細</a>
                   </p>
                   <p><a href="" class="btn btn-info btn-sm">編集</a></p>
                   <p><a href="" class="btn btn-danger btn-sm">削除</a></p>
               </td>
           </tr>
           @endforeach

参考:

PHPフレームワーク Laravel入門第2版 280p

この記事が気に入ったらサポートをしてみませんか?