A package built for laravel applications which allows items to be voted on. Items can be upvoted or downvoted which counts towards a total score.

v1.1.0 2020-04-27 11:51 UTC

This package is auto-updated.

Last update: 2024-02-27 21:06:07 UTC


Build Status Total Downloads License

This package gives your laravel project the ability to create and manage an upvote/downvote system for user created content. This project was inspired by Reddit karma.

Main Features in this Package

This package will provide you with 2 table migrations which will create a votes table (dd_votes) and a voter table (dd_voters).

You will also be given access to two traits:

Votable -> Adds upvoting and downvoting functionality to a votable object such as a blog post, comment, photos, or anything else with a user_id representing an owner.

CanVote -> To be applied to your User model. Adds additional functionality to your user which lets them manage their ability to vote and provides a votable score (calculated from votes others have casted on their votable objects).

You can also access the two models Vote and Voter.

A config file vote.php will be published to your config directory.


Via Composer

$ composer require daydevelops/vote
$ php artisan vendor:publish
$ php artisan migrate


Apply the Votable Trait

Suppose we have a blog and users can create comments. If we want to allow users to upvote and downvote comments, we simply add the Votable trait.

use Daydevelops\Vote\Traits\Votable;

class Comment extends Model
    use Votable;



Apply the CanVote Trait

The CanVote trait should be applied to your User model.

use Daydevelops\Vote\Traits\CanVote;

class User extends Model
    use CanVote;



Available Methods/Properties on the Votable Object

Authenticated User Casts a Vote

$this->vote($type); // $type should be "up" or "down" 

Authenticated User Casts an Upvote

$this->upVote(); // alias of $this->vote('up'); 

Authenticated User Casts a Downvote

$this->downVote(); // alias of $this->vote('down'); 

Authenticated User Removes a Vote


Has the Authenticated User Voted on this Object?


Has the Authenticated User Upvoted this Object?


Has the Authenticated User Downvoted this Object?


Get a Collection of all the Votes on this Object

$this->votes(); // hasMany relationship

Get the Total Score of all Votes Casted on this Object


Available Methods/Properties on the CanVote (User) Object

Does this User have a Voter Record?


Get the Voter Object for this User

$this->voter; // returns hasOne relationship to Daydevelops\Vote\Models\Voter

Make a Voter Record for this user

$this->makeVoter($change); // optional signed int $change is added to the default voter weight (see config/vote.php) upon creation 

Get the Users Score Calculated from Votes Casted by other Users


Available Methods/Properties on the Voter Model

where $voter = $user->voter;:

Change the Weight of the Voters FUTURE Votes

$voter->addWeight($change); // signed int $change is added to the users current vote weight.

Can the Voter Vote on an Object?


Is the Voter Banned from Voting?


Ban or Unban the Voter



Daydevelops\Vote\Events\ItemUpVoted -> Fired when a votable object is upvoted

Daydevelops\Vote\Events\ItemDownVoted -> Fired when a votable object is udownvoted

Daydevelops\Vote\Events\VoterWeightChanged -> Fired when a voters vote weight is updated


For further clarification on any of the features of this package, take a look at the tests or reach out to the maintainer of the package.


Please see contributing.md for details and a todolist.


If you discover any security related issues, please email adamday@daydevelops.com instead of using the issue tracker.



MIT. Please see the license file for more information.