前提・実現したいこと
以前も同じような内容で質問させていただきましたが3日考えても分からず、また質問させていただきます。
前提としてタイトル通りの事をやりたいのですが、ログインしているユーザーのつぶやきも表示されてしまいます。以前の質問ではテーブルを結合すればログインしているユーザー自身のつぶやきは表示されないという回答をいただきましたが、記述が分からずにいます。
以前いただいた回答:https://teratail.com/questions/298781
※解決できていないため、未解決のままにしています。
該当ソースコード
FollowsController
php
1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use Illuminate\Support\Facades\Auth; 7use Illuminate\Support\Facades\DB; 8use App\User; 9use App\Post; 10use App\Follow; 11 12class FollowsController extends Controller 13{ 14 public function followList(Post $post, Follow $follow) 15 { 16 $user = auth()->user(); 17 $follow_ids = $follow->followingIds($user->id); 18 $following_ids = $follow_ids->pluck('followed_id')->toArray(); 19 $timelines = $post->getTimelines($user->id, $following_ids); 20 return view('follows.followList',['timelines' => $timelines]); 21 } 22}
Followモデル
php
1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Follow extends Model 8{ 9 10 protected $fillable = [ 11 'following_id', 'followed_id' 12 ]; 13 14 public function followingIds(Int $user_id) 15 { 16 return $this->where('following_id', $user_id)->get(); 17 } 18 19}
Postモデル
php
1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Post extends Model 8{ 9 protected $fillable = [ 10 'user_id', 'post', 11 ]; 12 13 public function getTimeLines(Int $user_id, Array $follow_ids) 14 { 15 $follow_ids[] = $user_id; 16 return $this->whereIn('user_id', $follow_ids)->orderBy('created_at', 'DESC')->paginate(); 17 } 18}
ルート
php
1Route::group(['middleware' => 'auth'], function() { 2Route::get('/followList', 'FollowsController@followList'); 3});
followList.blade
php
1@foreach ($timelines as $timelines) 2 {{ $timelines->user_id }} 3 {{ $timelines->post }} 4@endforeach
followsテーブル
+--------------+------------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+------------------+------+-----+-------------------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | following_id | int(10) unsigned | NO | MUL | NULL | | | followed_id | int(10) unsigned | NO | MUL | NULL | | | created_at | timestamp | NO | | CURRENT_TIMESTAMP | | +--------------+------------------+------+-----+-------------------+----------------+
postsテーブル
+------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | user_id | int(10) unsigned | NO | MUL | NULL | | | post | varchar(500) | NO | | NULL | | | created_at | timestamp | YES | | NULL | | | updated_at | timestamp | YES | | NULL | | +------------+------------------+------+-----+---------+----------------+
上記の記述ですとフォローしている人のつぶやきは取得できますが、ログインしているユーザー自身のつぶやきも表示されてしまいます。
試したこと
FollowsController
php
1public function followlist() 2 { 3 $user = \DB::table('follows') 4 ->join('posts','posts.user_id','=','followed_id') 5 ->get(); 6 return view('follows.followList',['user' => $user]); 7 }
FollowsControllerを上記のように記述したところ、どのユーザーがログインしているに限らずすべてのつぶやきが表示されました。つまりfollowsテーブルの中身と結合しているpostsテーブルのすべての値を取得できます。
バージョン
laravel 5.5.48
php 7.4.5
homestead
ご教授の程、宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー