Files

57 lines
1.3 KiB
PHP

<?php
// app/Traits/HasRatings.php
namespace App\Traits;
use App\Models\Rating;
trait HasRatings
{
public function ratings()
{
return $this->morphMany(Rating::class, 'rateable');
}
public function getAverageRatingAttribute()
{
return round($this->ratings()->avg('stars'), 1);
}
public function getUserRatingAttribute()
{
if (!auth()->check()) return null;
return $this->ratings()
->where('user_id', auth()->id())
->value('stars');
}
// Get user's rating object
public function userRating()
{
if (!auth()->check()) return null;
return $this->ratings()
->where('user_id', auth()->id())
->first();
}
// Check if user has rated
public function getHasUserRatedAttribute()
{
return !is_null($this->userRating());
}
public function getRatingsCountAttribute()
{
return $this->ratings()->count();
}
// Get rating distribution
public function getRatingDistributionAttribute()
{
$distribution = [];
for ($i = 1; $i <= 5; $i++) {
$distribution[$i] = $this->ratings()->where('stars', $i)->count();
}
return $distribution;
}
}