前提
現在laravelを使って投稿や体重を管理できるアプリを作っております。
実現したいこと
投稿一覧ページにログインしているユーザーのみの投稿を表示し、ページネーション機能を実装したいです。コントローラーでログインユーザーの投稿のみを取得したいです。
発生している問題
投稿一覧ページにログインしているユーザーのみの投稿を表示することはできたのですが、今のやり方だとページネーションの表示がおかしくなってしまいます。(視覚的には他の人の投稿は見えないのだが、実際には取得されてしまっている。)
該当のソースコード
PHP
1//BlogController.php 2 3public function index(Request $request) 4 { 5 6 $search = $request->input('search'); 7 8 9 // 検索フォーム 10 $query = DB::table('blogs'); 11 12 // もしキーワードがあったら 13 if($search !== null){ 14 //全角スペースを半角に 15 $search_split = mb_convert_kana($search, 's'); 16 17 //空白で区切る 18 $search_split2 = preg_split('/[\s]+/', $search_split, -1, PREG_SPLIT_NO_EMPTY); 19 20 //単語をループで回す 21 foreach($search_split2 as $value) 22 { 23 $query->where('title', 'like', '%' .$value.'%') 24 ->orWhere('target_site', 'like', '%' .$value.'%') 25 ->orWhere('content', 'like', '%' .$value.'%') 26 ->orWhere('created_at', 'like', '%' .$value.'%'); 27 } 28 } 29 30 $query->select('id', 'title', 'target_site', 'content', 'created_at', 'user_id'); 31 $query->orderBy('created_at', 'desc'); 32 $blogs = $query->paginate(2); 33 34 return view('blog.index', compact('blogs')); 35 36 }
PHP
1//index.blade.php 2 3@extends('layouts.app') 4 5@section('content') 6<div class="container"> 7 <div class="row justify-content-center"> 8 <div class="col-md-12"> 9 <div class="card"> 10 <div class="card-header">{{ __('投稿一覧') }}</div> 11 12 <div class="card-body"> 13 @if (session('status')) 14 <div class="alert alert-success" role="alert"> 15 {{ session('status') }} 16 </div> 17 @endif 18 <form method="GET" action="{{ route('blog.create') }}"> 19 <button type="submit" class="btn btn-primary"> 20 新規投稿 21 </button> 22 </form> 23 24 <form method="GET" action="{{ route('blog.index') }}" class="form-inline my-2 my-lg-0"> 25 <input class="form-control mr-sm-2" name='search' type="search" placeholder="キーワード" aria-label="Search"> 26 <button class="btn btn-outline-success my-2 my-sm-0" type="submit">検索する</button> 27 </form> 28 29 <table class="table"> 30 <thead> 31 <tr> 32 <th scope="col">タイトル</th> 33 <th scope="col">鍛えた部位</th> 34 <th scope="col">内容</th> 35 <th scope="col">投稿日時</th> 36 <th scope="col">詳細</th> 37 </tr> 38 </thead> 39 <tbody> 40 @foreach($blogs as $blog) 41 @if( ( $blog->user_id ) === ( Auth::user()->id ) ) 42 <tr> 43 <th>{{ $blog->title }}</th> 44 <td>{{ $blog->target_site }}</td> 45 <td>{{ $blog->content }}</td> 46 <td>{{ $blog->created_at }}</td> 47 <td><a href="{{ route('blog.show', ['id' => $blog->id ]) }}">詳細</a></td> 48 </tr> 49 @endif 50 @endforeach 51 </tbody> 52 </table> 53 {{ $blogs->links() }} 54 </div> 55 </div> 56 </div> 57 </div> 58</div> 59@endsection
php
1<?php 2 3//Models/User.php 4 5namespace App\Models; 6 7use Illuminate\Contracts\Auth\MustVerifyEmail; 8use Illuminate\Database\Eloquent\Factories\HasFactory; 9use Illuminate\Foundation\Auth\User as Authenticatable; 10use Illuminate\Notifications\Notifiable; 11 12class User extends Authenticatable 13{ 14 use HasFactory, Notifiable; 15 16 /** 17 * The attributes that are mass assignable. 18 * 19 * @var array 20 */ 21 protected $fillable = [ 22 'name', 23 'email', 24 'password', 25 ]; 26 27 /** 28 * The attributes that should be hidden for arrays. 29 * 30 * @var array 31 */ 32 protected $hidden = [ 33 'password', 34 'remember_token', 35 ]; 36 37 /** 38 * The attributes that should be cast to native types. 39 * 40 * @var array 41 */ 42 protected $casts = [ 43 'email_verified_at' => 'datetime', 44 ]; 45 46 public function blogs(){ 47 return $this->hasMany('App\Models\Blog'); 48 } 49 50 public function weights(){ 51 return $this->hasMany('App\Models\Weight'); 52 } 53 54 public function selectUserFindById($id) 55 { 56 $query = $this->select([ 57 'id', 58 'name', 59 'email' 60 ])->where([ 61 'id' => $id 62 ]); 63 // first()は1件のみ取得する関数 64 return $query->first(); 65 } 66}
php
1<?php 2 3//Models/Blog.php 4 5namespace App\Models; 6 7use Illuminate\Database\Eloquent\Factories\HasFactory; 8use Illuminate\Database\Eloquent\Model; 9 10class Blog extends Model 11{ 12 use HasFactory; 13 14 public function user(){ 15 return $this->belongsTo('App\Models\User'); 16 } 17 18}
補足情報(FW/ツールのバージョンなど)
userモデルとblogモデルはリレーションを組んであります。
PHP 8.0.1
Laravel Framework 8.28.1
回答1件
あなたの回答
tips
プレビュー