laravelでいいね機能を実装したい
解決したいこと
①いいねボタンを押した際、投稿されている全てのいいねボタンに反映されてしまう。
②最新の投稿しかいいねできない。
laravelでツイッターのような投稿アプリをつくっています。
仕様
・投稿のいいね機能を押すと、グレーから赤色にアイコンが変化する。(データがはいる)
・再度、押すと赤からグレーに戻る。(データが取り消される)
そこで、以下の問題があります。
①ボタンを押した時、全ての投稿に反映されてしまう。(投稿ごとに反映するようにしたい。)
②最新の投稿にしか、いいねできない。(最新ではない投稿のいいねボタンを押すと、データは入るものの、変化しない状況です。)
index.blade.php
@if( $reply )
<!-- データが入ってれば赤 -->
<a href="{{ route('unlike', ['id' => $record->id]) }}" class="btn btn-danger opacity-75 btn-sm" name='post'>
<i class="fa fa-heart" aria-hidden="true"></i>
<span class="badge"></span></a>
@elseif(!$reply)
<!-- データなければ灰色 -->
<a href="{{ route('like', ['id' => $record->id]) }}" class="btn btn-secondary btn-sm" name='post'>
<i class="fa fa-heart" aria-hidden="true"></i>
<span class="badge"></span></a>
@endif
Homecontroller
public function index(){
$replies = new Reply;
$reply = $replies->liked();
}
Reply.php
public function liked(){
$ids = record::orderBy('updated_at','ASC')->pluck('id');
foreach($ids as $id){
$like_exists = Like::select('likes.*')
->where( [ ['user_id','=',\Auth::id()], [ 'record_id','=', $id ] ])
->exists();
}
//user_idとログイン中のユーザーID、likeを押したrecord_idと一致する投稿があり、
// 一致するデータがlikesテーブルに存在すればtrue、なければfalse
if($like_exists){
return true;
}else{
return false;
}
}
自分で試したこと
index.balde.phpの@if( $reply )の判定を投稿ごとに実施するようにすれば、解決できると思うのですが、どのようにすれば良いのか浮かびません。(かなり初歩的な問題だと思うのですが…)
何かお知恵をお貸しいただけると幸いです。
また、自己流の汚いコードなので見づらかったら申し訳ごじません。