Laravelで、投稿に対して「いいね」する機能を実装しています。
「いいね」したものをカウントする機能はできたのですが
「いいね」されたものをカウントする機能がうまくいかなくて困っています。
どなたか力をお貸しいただけたらと思い投稿しました。
テストでユーザ2人登録。
「いいねされた投稿」のはずなのに、他のユーザの名前の投稿が表示される。
「いいねされた」なので自身の投稿以外は表示されないはず。
1いいねされたら1ずつ動くカウンタが「2」以上進まない。
私はPHP/Laravelの学習を始めて2か月ほどです。
何がどうなって、どういう仕事をしているか全てを説明できるまでにまだまだ至っておりません。
説明も足らない点があると思いますが、よろしくお願いします。
user_favorite_table.php
class CreateUserFavoriteTable extends Migration { public function up() { Schema::create('user_favorite', function (Blueprint $table) { $table->increments('id'); $table->integer('user_id')->unsigned()->index(); $table->integer('favorite_id')->unsigned()->index(); $table->timestamps(); // 外部キー設定 $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); $table->foreign('favorite_id')->references('id')->on('answers')->onDelete('cascade'); // user_idとfavorite_idの組み合わせの重複を許さない $table->unique(['user_id', 'favorite_id']); }); }
User.php
// 「いいね」する側 favorite追加 public function myfavorites() { return $this->belongsToMany(Answer::class, 'user_favorite', 'user_id', 'favorite_id')->withTimestamps(); } // 「いいね」される側 public function favoritemes() { return $this->belongsToMany(Answer::class, 'user_favorite', 'favorite_id','user_id')->withTimestamps(); }
UsersController.php (themeに対するanswerに「いいね」します)
public function favoritemes($id) { $data = []; $user = User::find($id); $theme = Theme::find($id); $favoritemes = $user->favoritemes()->orderBy('created_at', 'desc')->paginate(10); $data = [ 'user' => $user, 'answers' => $favoritemes, 'theme' => $theme, ]; $data += $this->counts($user); return view('users.favoritemes', $data); }
Controller.php
class Controller extends BaseController { use AuthorizesRequests, DispatchesJobs, ValidatesRequests; public function counts($user) { $count_myfavorites = $user->myfavorites()->count(); $count_favoritemes = $user->favoritemes()->count(); return [ 'count_myfavorites' => $count_myfavorites, 'count_favoritemes' => $count_favoritemes, ]; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。