laravel初心者です。現在、色々なページを参考にしてlaravelでフォロー機能を実装しています。
ページ表示時に表題のエラーが出て解決できません。未定義の変数だということは分かっています。
・聞きたいこと
$userはcontrollerのどこで定義しているのか。
・試したこと
$userにデータが渡っていないと思い、Controllerに$user = User::find($id); を追加しましたが、エラーは解決されませんでした。
下記よりコードです。
search
1@if(Auth::user()->isFollowing($user->id)) 2 <form method="POST" action="{{ route('unfollow', ['user' => $user->id]) }}"> 3 @csrf 4 <button type="submit" class="btn btn-outline-info btn-sm" style="width: 100%;">フォロー解除</button> 5 </form> 6 @else 7 <form method="POST" action="{{ route('follow', ['user' => $user->id]) }}"> 8 @csrf 9 <button type="submit" class="btn btn-outline-info btn-sm" style="width: 100%;">フォローする</button> 10 </form> 11@endif
UsersController
1// フォロー 2 public function follow(User $user) 3 { 4 $follower = Auth::user(); 5 // フォローしているか 6 $is_following = $follower->isFollowing($user->id); 7 if(!$is_following) { 8 // フォローしていなければフォローする 9 $follower->follow($user->id); 10 return back(); 11 } 12 } 13 14// フォロー解除 15 public function unfollow(User $user) 16 { 17 $follower = Auth::user(); 18 // フォローしているか 19 $is_following = $follower->isFollowing($user->id); 20 if($is_following) { 21 // フォローしていればフォローを解除する 22 $follower->unfollow($user->id); 23 return back(); 24 } 25 }
User
1public function followings() 2 { 3 return $this->belongsToMany(self::class, 'follows', 'follow_id', 'follower_id')->withTimestamps(); 4 } 5 6 // あるユーザのフォロワーとなっているユーザ を取得する 7 public function followers() 8 { 9 return $this->belongsToMany(self::class, 'follows', 'follower_id', 'follow_id')->withTimestamps(); 10 } 11 12 // フォローする 13 public function follow(Int $user_id) 14 { 15 return $this->follows()->attach($user_id); 16 } 17 18 // フォロー解除する 19 public function unfollow(Int $user_id) 20 { 21 return $this->follows()->detach($user_id); 22 } 23 24 // フォローしているか 25 public function isFollowing(Int $user_id) 26 { 27 return (boolean) $this->follows()->where('follower_id', $user_id); 28 } 29 30 // フォローされているか 31 public function isFollowed(Int $user_id) 32 { 33 return (boolean) $this->followers()->where('follow_id', $user_id); 34 }
web
1Route::post('users/{user}/follow', 'UsersController@follow')->name('follow'); 2Route::post('users/{user}/follow', 'UsersController@unfollow')->name('unfollow');
table
1public function up() 2 { 3 Schema::create('follows', function (Blueprint $table) 4 { 5 $table->increments('id')->autoIncrement(); 6 $table->integer('follow_id')->unsigned(); //フォローされている人 ed 7 $table->integer('follower_id')->unsigned(); //フォローしている人 ing 8 $table->timestamp('created_at')->useCurrent(); 9 // 外部キー制約 10 $table->foreign('follow_id')->references('id')->on('users')->onDelete('cascade'); 11 $table->foreign('follower_id')->references('id')->on('users')->onDelete('cascade'); 12 // 組み合わせのダブりを禁止 13 $table->unique(['follow_id', 'follower_id']); 14 }); 15 }
当方、独学で勉強していてかなりの初心者でです。雑な質問で申し訳ございませんが、分かる範囲んでいいので優しく教えていただけると助かります。
回答1件
あなたの回答
tips
プレビュー