public function topicDownVote(Topic $topic) { if ($topic->votes()->ByWhom(auth()->id())->WithType('downvote')->count()) { // click second time for remove downvote $topic->votes()->ByWhom(auth()->id())->WithType('downvote')->delete(); $topic->increment('vote_count', 1); } elseif ($topic->votes()->ByWhom(auth()->id())->WithType('upvote')->count()) { // user already clicked upvote once $topic->votes()->ByWhom(auth()->id())->WithType('upvote')->delete(); $topic->votes()->create(['user_id' => auth()->id(), 'is' => 'downvote']); $topic->decrement('vote_count', 2); } else { // click first time $topic->votes()->create(['user_id' => auth()->id(), 'is' => 'downvote']); $topic->decrement('vote_count', 1); } }