💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۱۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ محمدجوکار
پاسخ تمرین استاد + یک امکانِ اضافه
جامعه لاراول ایجاد شده در ۲۹ خرداد ۱۴۰۳

سلام و احترام

حذف لایک یا دیس‌لایک رو به نحوه‌ی زیر پیاده‌سازی کردم به علاوه اینکه به نظرم خیلی حالتِ بدی داشت که یک‌ نفر یک ویدئو رو بتونه هم لایک کنه، هم دیس‌لایک. این امکان رو هم پیاده کردم که اگر کسی کامنتی یا ویدئویی رو یک بار لایک کرده، دیگه نتونه دیس‌لایکشم کنه و بالعکس ... 

<?php
namespace App\Models\Traits;
use App\Models\Like;
use App\Models\User;
use Illuminate\Database\Eloquent\Relations\MorphMany;
Trait Likeable
{
    public function likes(): MorphMany
    {
        return $this->MorphMany(Like::class, 'likeable');
    }
    protected function getLikeCountAttribute()
    {
        return $this->likes()
        ->where('vote', 1)
        ->count();
    }
    protected function getDislikeCountAttribute()
    {
        return $this->likes()
        ->where('vote', -1)
        ->count();
    }
    public function likedBy(User $user)
    {
        if($this->isDislikedBy($user))
        {
            return back()->with('alert', __('messages.you-can-like-or-dislike-once'));
        }
        if ($this->islikedBy($user))
        {
            return $this->gettingLikeBack($user);
        }
        return  $this->likes()->create([
            'vote' => 1,
            'user_id' => $user->id,
        ]);
    }
    public function dislikedBy(User $user)
    {
        if($this->isLikedBy($user))
        {
            return back()->with('alert', __('messages.you-can-like-or-dislike-once'));
        }
        if ($this->isdislikedBy($user))
        {
            return $this->gettingDislikeBack($user);
        }
        return  $this->likes()->create([
            'vote' => -1,
            'user_id' => $user->id,
        ]);
    }
    public function isLikedBy(User $user)
    {
        return $this->likes()
        ->where('vote', 1)
        ->where('user_id', $user->id)
        ->exists();
    }
    public function isDislikedBy(User $user)
    {
        return $this->likes()
        ->where('vote', -1)
        ->where('user_id', $user->id)
        ->exists();
    }
    public function gettingLikeBack(User $user)
    {
        return $this->likes()
        ->where('user_id', $user->id)
        ->where('vote', 1)
        ->delete();
    }
    public function gettingDislikeBack(User $user)
    {
        return $this->likes()
        ->where('user_id', $user->id)
        ->where('vote', -1)
        ->delete();
    }
}

ممنون

 

محمدرسول اصغری ۳۱ خرداد ۱۴۰۳، ۱۱:۴۰