前提・実現したいこと
laravelでtwitter風のサイトを作っています。
フォローする、フォロー解除の機能を実装中に以下ようなエラーが発生しました。
発生している問題・エラーメッセージ
Argument 1 passed to App\Models\User::isFollowing() must be of the type int, null given, called in /home/vagrant/code/Laravel/app/Http/Controllers/UserController.php on line 108
該当のソースコード
\Controller\UserController
//フォロー public function follow(User $user) { $follower = auth()->user(); //フォローしているか $is_following = $follower->isFollowing($user->id); if(!$is_following) { //フォローしていなければする $follower->follow($user->id); return back(); } } //フォロー解除 public function unfollow(User $user) { $follower = auth()->user(); //フォローしているか $is_following = $follower->isFollowing($user->id); if($is_following) { //フォローしていれば解除する $follower->unfollow($user->id); return back(); } }
User.php
//フォローする public function follow(Int $user_id) { return $this->follows()->attach($user_id); } //フォロー解除 public function unfollow(Int $user_id) { return $this->follows()->detach($user_id); } //フォローしているか public function isFollowing(Int $user_id) { return (boolean) $this->follows()->where('followed_id', $user_id)->first(['id']); } //フォローされているか public function isFollowed(Int $user_id) { return (boolean) $this->followers()->where('following_id', $user_id)->first(['id']); }
view\users\index.blade.php
view\users\index.blade.php
1 @if(auth()->user()->isFollowed($user->id)) 2 <div class="px-2"> 3 <span class="px-1 bg-secondary text-light">フォローされています</span> 4 </div> 5 @endif 6 <div class="d-flex justify-content-end flex-grow-1"> 7 @if(auth()->user()->isFollowing($user->id)) 8 <form action="{{ route('unfollow', ['id' => $user->id]) }}" method="POST"> 9 {{ csrf_field() }} 10 {{ method_field('DELETE') }} 11 <button type="submit" class="btn btn-danger">フォロー解除</button> 12 </form> 13 @else 14 <form action="{{ route('follow', ['id' => 15 $user->id]) }}" method="POST"> 16 {{ csrf_field() }} 17 <button type="submit" class="btn btn-primary">フォローする</button> 18 </form> 19 @endif
route
1 Route::post('users/{id}/follow', 'UserController@follow')->name('follow'); 2 Route::delete('users/{id}/unfollow', 'UserController@unfollow')->name('unfollow');
$userをvar_dump
object(App\Models\User)[302] protected 'fillable' => array (size=6) 0 => string 'name' (length=4) 1 => string 'email' (length=5) 2 => string 'password' (length=8) 3 => string 'screen_name' (length=11) 4 => string 'team' (length=4) 5 => string 'profile_image' (length=13) protected 'hidden' => array (size=2) 0 => string 'password' (length=8) 1 => string 'remember_token' (length=14) protected 'casts' => array (size=1) 'email_verified_at' => string 'datetime' (length=8) protected 'connection' => null protected 'table' => null protected 'primaryKey' => string 'id' (length=2) protected 'keyType' => string 'int' (length=3) public 'incrementing' => boolean true
試したこと
User.phpのpublic function isFollowing(Int $user_id)のIntを?Intにしてみましたが、フォローやフォロー解除ができませんでした。
なぜnullになってしまうのか全くわかりませんでした。user_idが取れていまいのでしょうか?
補足情報(FW/ツールのバージョンなど)
laravel 7.3.0
php 7.4.4
Homestead
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/31 02:48
2020/03/31 02:54
2020/03/31 03:57
2020/03/31 03:58
2020/03/31 04:06
2020/03/31 04:12
2020/03/31 05:03 編集
2020/03/31 07:02