Allows multiple models to be rated with a fivestar like system.

Fund package maintenance!

Installs: 354 473

Dependents: 5

Suggesters: 0

Security: 0

Stars: 395

Watchers: 11

Forks: 93

Open Issues: 1

3.3.0 2024-05-03 05:42 UTC

This package is auto-updated.

Last update: 2024-05-03 05:43:51 UTC


Latest Stable Version License

Total Downloads Monthly Downloads Daily Downloads

Provides a trait to allow rating of any Eloquent models within your app for Laravel 6/7/8/9.

Ratings could be fivestar style, or simple +1/-1 style.


Laravel versions < 6.x should use the 1.x releases

Laravel versions >= 6.x and < 8.x should use 2.x+ releases

Laravel versions >= 8.x should use the 3.x releases


You can install the package via composer:

composer require willvincent/laravel-rateable

You can publish and run the migrations with:

php artisan vendor:publish --provider="willvincent\Rateable\RateableServiceProvider" --tag="migrations"
php artisan migrate

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 'willvincent\Rateable\RateableServiceProvider' to the end of the $providers array.

'providers' => [




In order to mark a model as "rateable", import the Rateable trait.

<?php namespace App;

use willvincent\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();

// Add a rating of 5, from the currently authenticated user

Or perhaps you want to enforce that users can only rate each model one time, and if they submit a new value, it will update their existing rating.

In that case, you'll want to use rateOnce() instead:

$post = Post::first();

// Add a rating of 3, or change the user's existing rating _to_ 3.

Once a model has some ratings, you can fetch the average rating:

$post = Post::first();

// $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.



Want to know how many ratings a model has?


// Or if you specifically want the number of unique users that have rated the model:


composer test


Please see CHANGELOG for more information on what has changed recently.


Please see CONTRIBUTING for details.



The MIT License (MIT). Please see License File for more information.