前提・実現したいこと
以前も質問させていただいたことですが、原因がいまいち掴めなかった為、再度質問させていただきます。
実現したいこととしては、ログインしているユーザーでフォローしているユーザーの数、フォローされているユーザーの数をcountを使って取得したいと考えています。
該当ソースコード
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 show(User $user, Follow $follow) 15 { 16 $login_user = auth()->user(); 17 $is_following = $login_user->isFollowing($user->id); 18 $is_followed = $login_user->isFollowed($user->id); 19 $follow_count = $follow->getFollowCount($user->id); 20 $follower_count = $follow->getFollowerCount($user->id); 21 22 return view('users.show', [ 23 'user' => $user, 24 'is_following' => $is_following, 25 'is_followed' => $is_followed, 26 'follow_count' => $follow_count, 27 'follower_count' => $follower_count 28 ]); 29 } 30}
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 getFollowCount($user_id) 15 { 16 return $this->where('following_id', $user_id)->count(); 17 } 18 19 public function getFollowerCount($user_id) 20 { 21 return $this->where('followed_id', $user_id)->count(); 22 } 23}
Userモデル
php
1<?php 2 3namespace App; 4 5use Illuminate\Notifications\Notifiable; 6use Illuminate\Foundation\Auth\User as Authenticatable; 7 8class User extends Authenticatable 9{ 10 use Notifiable; 11 12 /** 13 * The attributes that are mass assignable. 14 * 15 * @var array 16 */ 17 protected $fillable = [ 18 'username', 'mail', 'password', 19 ]; 20 21 /** 22 * The attributes that should be hidden for arrays. 23 * 24 * @var array 25 */ 26 protected $hidden = [ 27 'password', 'remember_token', 28 ]; 29 30 public function follow($user_id) 31 { 32 return $this->follows()->attach($user_id); 33 } 34 35 public function unfollow($user_id) 36 { 37 return $this->follows()->detach($user_id); 38 } 39 40 public function isFollowing($user_id) 41 { 42 return (boolean) $this->follows()->where('followed_id', $user_id)->exists(); 43 } 44 45 public function isFollowed($user_id) 46 { 47 return (boolean) $this->followers()->where('following_id', $user_id)->exists(); 48 } 49} 50
followsテーブル
php
1<?php 2 3use Illuminate\Support\Facades\Schema; 4use Illuminate\Database\Schema\Blueprint; 5use Illuminate\Database\Migrations\Migration; 6 7class CreateFollowsTable extends Migration 8{ 9 /** 10 * Run the migrations. 11 * 12 * @return void 13 */ 14 public function up() 15 { 16 Schema::create('follows', function (Blueprint $table) 17 { 18 $table->increments('id')->autoIncrement(); 19 $table->integer('following_id')->unsigned(); 20 $table->integer('followed_id')->unsigned(); 21 $table->timestamp('created_at')->useCurrent(); 22 23 $table->index('following_id'); 24 $table->index('followed_id'); 25 26 $table->unique(['following_id','followed_id']); 27 }); 28 } 29 30 31 32 /** 33 * Reverse the migrations. 34 * 35 * @return void 36 */ 37 public function down() 38 { 39 Schema::dropIfExists('follows'); 40 } 41} 42
usersテーブル
php
1<?php 2 3use Illuminate\Support\Facades\Schema; 4use Illuminate\Database\Schema\Blueprint; 5use Illuminate\Database\Migrations\Migration; 6 7class CreateUsersTable extends Migration 8{ 9 /** 10 * Run the migrations. 11 * 12 * @return void 13 */ 14 public function up() 15 { 16 Schema::create('users', function (Blueprint $table) 17 { 18 $table->increments('id')->autoIncrement(); 19 $table->string('username',255); 20 $table->string('mail',255); 21 $table->string('password',255); 22 $table->string('bio',400)->nullable(); 23 $table->string('images',255)->default('dawn.png')->nullable(); 24 $table->timestamps(); 25 }); 26 } 27 28 /** 29 * Reverse the migrations. 30 * 31 * @return void 32 */ 33 public function down() 34 { 35 Schema::dropIfExists('users'); 36 } 37} 38
ルート
php
1Route::group(['middleware' => 'auth'], function() { 2Route::get('/show','FollowsController@show'); 3});
試したこと
Followモデルを
php
1public function getFollowCount($user_id) 2 { 3 return $this->where('following_id', '<>', $user_id)->count(); 4 } 5 6 public function getFollowerCount($user_id) 7 { 8 return $this->where('followed_id', '<>', $user_id)->count(); 9 }
このようにしたところ、データベース上ですべてのフォローしているユーザーの数、フォローされているユーザーの数は取得できました。
バージョン
laravel 5.5.48
php 7.4.5
homestead
ご教授の程、よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/13 13:27