nr-type / like-dislike
This is a package for developers who want to use like and dislike options in their applications, this is the easiest way to do that.
README
About Package
This is a package for developers who want to use like and dislike options in their applications, this is the easiest way to do that.
Installing
This package can be installed through Composer in your application :
Run the command.
composer require nr-type/like-dislike
Migration
After that run the Migration command :
php artisan migrate
Model Use
The model where you want to have like and dislike.
You just need to use NrType\LikeDislike\Traits\Likeable
and NrType\LikeDislike\Traits\Dislikeable
.
And inside the class use Likeable
and Dislikeable
.
use NrType\LikeDislike\Traits\Likeable; use NrType\LikeDislike\Traits\Dislikeable; class Post extends Model { use Likeable, Dislikeable; }
You can use like dislike options in multiple Model
Multiple Model
are can be Comment
,Video
,Photo
.
use NrType\LikeDislike\Traits\Likeable; use NrType\LikeDislike\Traits\Dislikeable; class Comment extends Model { use Likeable, Dislikeable; }
Optional
Suppose you just only need Like option for your application.
Then you use NrType\LikeDislike\Traits\Likeable
and Likeable
.
use NrType\LikeDislike\Traits\Likeable; class Post extends Model { use Likeable; }
Compatibility
Like
and Dislike
can work individually and also both are compatible to work with each other, suppose someone like the post and after some time later thinks that he/she wants to dislike the post. He/she just simply click the dislike button, and it will remove
his/her like
on that particular post and dislike
.
Uses in Controller
Like
Use like option in the post such as like 2 lines of code.
public function like (Post $post) { $post->like(); return redirect()->route('posts.index'); }
But
Suppose you want that someone's click
like button then it will like the post and again he click
liked button then it will unlike the post. Then here is removeLike()
. if User alreay like that post it will remove that particular like in the same method or if you want you can create another route and method to unlike the post.
public function like (Post $post) { if($post->removeLike()){ return redirect()->route('posts.index'); } $post->like(); return redirect()->route('posts.index'); }
DisLike
Use dislike in the post same as like in post. For dislike options again you have dislike()
and removeDislike()
public function dislike (Post $post) { $post->dislike(); return redirect()->route('posts.index'); }
Or
public function dislike (Post $post) { if ($post->removeDislike()) { return redirect()->route('posts.index'); } $post->dislike(); return redirect()->route('posts.index'); }
Likers and Dislikers on the Post
You can easily access likers and dislikers through likers()
and dislikers()
. default it will return with users id
,name
from users
table.
public function likers (Post $post) { return $post->likers(); }
Or
public function dislikers (Post $post) { return $post->dislikers(); }
Now here has somethings
likers()
and dislikers()
default return id
,name
but you maybe don't need id
, you may only need name
or your users database table doesn't have name
field, it can be first_name
,last_name
or maybe something else or maybe you need more then those fields. Here have a solution. You just pass a array
in side the method. It will return those fields data form users table.
public function likers (Post $post) { $fields = ['id','first_name','last_name','age']; return $post->likers($fields); }
Or
public function dislikers (Post $post) { $fields = ['id','name','age']; return $post->dislikers($fields); }
with()
relationship call in Controller
You can show likes
, dislikes
on posts and also want to show how many likes and dislike on posts with likeCounter
, dislikeCounter
.
public function index() { $relations = ['likes','likeCounter','dislikes','dislikeCounter']; $data['posts'] = Post::with($relations)->get(); return view('post.index', $data); }
Or
You may have comments
on posts
and you need comments
and also need likes
on particular comment
and how many likes
on comment
. Then you can use comments.likes
and comments.likeCounter
.
public function index() { $relations = [ 'likes', 'likeCounter', 'dislikes', 'dislikeCounter', 'comments.likes', 'comments.likeCounter' ]; $data['posts'] = Post::with($relations)->get(); return view('post.index', $data); }
Additional options
hasLike()
, hasDislike()
is for check that logged in user has like or dislike in post or comment. It return boolean
. You can use hasLike()
hasDislike()
in blades file as well.
{{ $post->hasLike() ? 'Liked' : 'Like' }} {{ $post->hasDislike() ? 'Disliked' : 'Dislike' }}
License
Like Dislike bucket is open-sourced software licensed under the MIT license.