### 目標

ユーザープロフィールページ(show.blade)に飛んだ際に画面下部に、そのユーザーの投稿からランダムに3件だけおすすめの投稿として表示させたい。

### 現状の問題点

過去の投稿した内容を丸ごと一件ずつ呼び出したいのですが、phpmyadminで設定しているpostsテーブルから
user_id(投稿者の名前)だけやcomment(投稿者の書いたコメント内容)だけを呼び出す方法は分かるのですが、postsテーブル丸ごと呼び出す際の書き方が分かりません。

Post.php (スコープを書いたPostモデル)

```

    <?php
    
    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Post extends Model
    {
        public function comments(){
            return $this->hasMany('App\Comment');
        }
        
        protected $fillable = ['user_id', 'comment', 'image'];
        
        public function user(){
            return $this->belongsTo('App\User');
        }
        
        // public function scopeRecommend($query){
        //     // ランダムに３つの投稿を取得
        //     // return $query->inRandomOrder()->limit(3);
        //     //最新の投稿を３つ取得
        //     return $query->latest()->limit(3);
        // }
        
        public function scopeRecommend($query, $self_id){
            //該当のユーザーの投稿
            // ランダムに３つの投稿を取得
            return $query->where('user_id', '=', $self_id)->inRandomOrder()->limit(3);
        }
    
    }
    
```

UserController.php (ユーザープロフィール(show.blade)等のコントローラー)

```

    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use App\User;
    use App\Post;
    use App\Http\Requests\UserRequest;
    use App\Http\Requests\UserImageRequest;
    
    class UserController extends Controller
    {
        public function show($id)
        {
            $user = User::find($id);
            $recommended_posts = Post::recommend($user->id)->get();
            return view('users.show',[
                'title' => 'プロフィール',
                'user' => $user,
                'recommended_posts' => $recommended_posts
            ]);
        }
        
        public function edit(int $id)
        {
            $user = User::find($id);
            return view('users.edit',[
                'title' => 'プロフィール編集',
                'user' => $user,
            ]); 
        }
        
        public function update(int $id, UserRequest $request){
            $user = User::find($id);
            $user->update($request->only(['name', 'email', 'profile']));
            session()->flash('success', 'プロフィールを編集しました！');
            return redirect()->route('users.show', $id);
        }
        
          // 画像変更処理
          public function editImage($id)
          {
            $user = User::find($id);
            return view('users.edit_image', [
              'title' => 'プロフィール画像変更画面',
              'user' => $user,
            ]);
          }
          public function updateImage($id, UserImageRequest $request){
              
              //画像投稿処理
              $path = '';
              $image = $request->file('image');
              
              if(isset($image) === true){
                  // publicディスク(storage/app/)のphotosディレクトリに保存
                  $path = $image->store('photos', 'public');
              }
              
              $user = User::find($id);
              
              // 変更前の画像の削除
              if($user->image !== ''){
                  // publicディスクから、該当の投稿画像($user->image)を削除
                  \Storage::disk('public')->delete(\Storage::url($user->image));
              }
              
              $user->update([
                'image' => $path, //ファイル名を保存    
              ]);
              
              session()->flash('success', '画像を変更しました！');
              return redirect()->route('users.show', $id);
          }
    }
    
```

show.blade.php(ユーザープロフィール画面に当たるビュー)

```

    @extends('layouts.logged_in')
    
    @section('content')
    <h1>{{ $title }}</h1>
    
    <a href="{{ route('users.edit', Auth::user() )}}">編集</a>
    
        @if($user !== null)
        <div>
            名前
            {{ $user->name }}
        </div>
        <div>
      @if($user->image !== '')
          <img src="{{ asset('storage/' . $user->image) }}">
      @else
          <img src="{{ asset('images/no_image.png') }}">
      @endif
            <a href="{{ route('users.edit_image', $user) }}">画像を変更</a>
        </div>
        <div>
            <span>プロフィール</span>
            <ul>
                @if($user->profile)
                <li>{{ $user->profile }}</li>
                @else
                <li>プロフィールが設定されていません。</li>
                @endif
            </ul>
        </div>
        
        @else
    <p>設定されていません。</p>
    
        @endif
        
    <h2>{{ $user->name }} のおすすめ投稿</h2>
    <ul>
        @forelse($recommended_posts as $recommend_post )
            <li><a href="{{ route('posts.show', $recommend_post) }}">{{ $recommend_post->comment }}</a></li>
            @empty
            <li>おすすめの投稿はありません。</li>
    </ul>
        @endforelse
    @endsection
    
```
CC BY-SA 4.0
2022-10-11T15:20:11.503
91552
2022-10-12T01:20:42.410
2022-10-12T01:20:42.410
3060
54798
question
laravel laravel-5
Laravelにてクエリビルダを使ったおすすめ投稿の表示について