8000 GitHub - jcc/laravel-vote: :tada: The package helps you to add user based vote system to your model.
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

๐ŸŽ‰ The package helps you to add user based vote system to your model.

License

Notifications You must be signed in to change notification settings

jcc/laravel-vote

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

43 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Laravel Vote System

๐ŸŽ‰ This package helps you to add user based vote system to your model.

Installation

You can install the package using Composer:

$ composer require "jcc/laravel-vote:~2.0"

Then add the service provider to config/app.php:

Jcc\LaravelVote\VoteServiceProvider::class

Publish the migrations file:

$ php artisan vendor:publish --provider="Jcc\LaravelVote\VoteServiceProvider" --tag="migrations"

Finally, use VoteTrait in User model:

use Jcc\LaravelVote\Traits\Voter;

class User extends Model
{
    use Voter;
}

Or use CanBeVoted in Comment model:

use Jcc\LaravelVote\Traits\Votable;

class Comment extends Model
{
    use Votable;
}

Usage

For User model

Up vote a comment or comments

$comment = Comment::find(1);

$user->upVote($comment);

Down vote a comment or comments

$comment = Comment::find(1);

$user->downVote($comment);

Cancel vote a comment or comments

$comment = Comment::find(1);

$user->cancelVote($comment);

Get user has voted comment items

$user->getVotedItems(Comment::class)->get();

Check if user has up or down vote

$comment = Comment::find(1);

$user->hasVoted($comment);

Check if user has up vote

$comment = Comment::find(1);

$user->hasUpVoted($comment);

Check if user has down vote

$comment = Comment::find(1);

$user->hasDownVoted($comment);

For Comment model

Get comment voters

$comment->voters()->get();

Count comment voters

$comment->voters()->count();

Get comment up voters

$comment->upVoters()->get();

Count comment up voters

$comment->upVoters()->count();

Get comment down voters

$comment->downVoters()->get();

Count comment down voters

$comment->downVoters()->count();

Check if voted by

$user = User::find(1);

$comment->isVotedBy($user);

Check if up voted by

$user = User::find(1);

$comment->isUpVotedBy($user);

Check if down voted by

$user = User::find(1);

$comment->isDownVotedBy($user);

N+1 issue

To avoid the N+1 issue, you can use eager loading to reduce this operation to just 2 queries. When querying, you may specify which relationships should be eager loaded using the with method:

// Voter
$users = User::with('votes')->get();

foreach($users as $user) {
    $user->hasVoted($comment);
}

// Votable
$comments = Comment::with('voters')->get();

foreach($comments as $comment) {
    $comment->isVotedBy($user);
}

Events

Event Description
Jcc\LaravelVote\Events\Voted Triggered when the relationship is created or updated.
Jcc\LaravelVote\Events\CancelVoted Triggered when the relationship is deleted.

Reference

License

MIT

About

๐ŸŽ‰ The package helps you to add user based vote system to your model.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

0