muyaedward / rateable-laravel
Allows multiple models to be rated with a fivestar like system.
Requires
- php: >=7.0
- illuminate/database: ^5.5|^6.0|^6.1|^6.2|^6.3|^6.4|^6.5|^6.6
- illuminate/support: ^5.5|^6.0|^6.1|^6.2|^6.3|^6.4|^6.5|^6.6
Requires (Dev)
- phpunit/phpunit: 7.*|8.*
This package is not auto-updated.
Last update: 2025-03-02 08:34:50 UTC
README
Provides a trait to allow rating of any Eloquent models within your app for Laravel 5.
Ratings could be fivestar style, or simple +1/-1 style.
Installation
Require the package using Composer:
composer require muyaedward/rateable-laravel
As with most Laravel packages, if you're using Laravel 5.5 or later, the package will be auto-discovered (learn more if this is new to you).
If you're using a version of Laravel before 5.5, you'll need to register the Rateable service provider. In your config/app.php
add 'muyaedward\Rateable\RateableServiceProvider'
to the end of the $providers
array.
'providers' => [ Illuminate\Foundation\Providers\ArtisanServiceProvider::class, Illuminate\Auth\AuthServiceProvider::class, ... muyaedward\Rateable\RateableServiceProvider::class, ],
Getting started
After the package is correctly installed, you need to generate the migration.
php artisan rateable:migration
It will generate the <timestamp>_create_ratings_table.php
migration. You may now run it with the artisan migrate command:
php artisan migrate
After the migration, one new table will be present, ratings
.
Usage
In order to mark a model as "rateable", import the Rateable
trait.
<?php namespace App; use muyaedward\Rateable\Rateable; use Illuminate\Database\Eloquent\Model; class Post extends Model { use Rateable; }
Now, your model has access to a few additional methods.
First, to add a rating to your model:
$post = Post::first(); $rating = new muyaedward\Rateable\Rating; $rating->rating = 5; $rating->user_id = \Auth::id(); $post->ratings()->save($rating); dd(Post::first()->ratings);
Once a model has some ratings, you can fetch the average rating:
$post = Post::first(); dd($post->averageRating); // $post->averageRating() also works for this.
Also, you can fetch the rating percentage. This is also how you enforce a maximum rating value.
$post = Post::first(); dd($post->ratingPercent(10)); // Ten star rating system // Note: The value passed in is treated as the maximum allowed value. // This defaults to 5 so it can be called without passing a value as well. // $post->ratingPercent(5) -- Five star rating system totally equivilent to: // $post->ratingPercent()
You can also fetch the sum or average of ratings for the given rateable item the current (authorized) has voted/rated.
$post = Post::first(); // These values depend on the user being logged in, // they use the Auth facade to fetch the current user's id. dd($post->userAverageRating); dd($post->userSumRating);