前提・実現したいこと
laravelを使いTwitter風WEBアプリを作成しています。
フォローしているユーザーのつぶやきなどを表示させたいと思っているのですが、ログインしているユーザーの情報も表示されてしまいます。
該当ソースコード
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 | | +------------+------------------+------+-----+---------+----------------+
試したこと
dd($timelines); で値を確認したところログインしているユーザーも含まれていました。
なのでPostモデルのgetTimelinesの記述を工夫する必要があると思い
php
1public function getTimeLines(Int $user_id) 2 { 3 return $this->where('user_id','<>', $user_id)->orderBy('created_at', 'DESC')->paginate(); 4 }
上記の記述のようにしたところフォローしているしていないに限らずログインしているユーザー以外のつぶやきを取得できました。
バージョン
laravel 5.5.48
php 7.4.5
homestead
ご教授の程、宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー