All Projects → cybercog → Laravel Likeable

cybercog / Laravel Likeable

Licence: mit
Rate Eloquent models with Likes and Dislikes in Laravel. Development moved to Laravel Love package!

Projects that are alternatives of or similar to Laravel Likeable

Laravel Reactions
Laravel reactions package for implementing reactions (eg: like, dislike, love, emotion, etc) on Eloquent models.
Stars: ✭ 58 (-38.95%)
Mutual labels:  eloquent, laravel, rating, rate, emotion
Laravel Love
Add Social Reactions to Laravel Eloquent Models. It lets people express how they feel about the content. Fully customizable Weighted Reaction System & Reaction Type System with Like, Dislike and any other custom emotion types. Do you react?
Stars: ✭ 822 (+765.26%)
Mutual labels:  eloquent, laravel, rating, rate, emotion
Laravel Ownership
Laravel Ownership simplify management of Eloquent model's owner.
Stars: ✭ 71 (-25.26%)
Mutual labels:  eloquent, laravel, package, trait
Befriended
Eloquent Befriended brings social media-like features like following, blocking and filtering content based on following or blocked models.
Stars: ✭ 596 (+527.37%)
Mutual labels:  eloquent, laravel, package, trait
Laravel Ban
Laravel Ban simplify blocking and banning Eloquent models.
Stars: ✭ 572 (+502.11%)
Mutual labels:  eloquent, laravel, package, trait
Rating
Laravel Eloquent Rating allows you to assign ratings to any model.
Stars: ✭ 175 (+84.21%)
Mutual labels:  eloquent, laravel, rating
Blogetc
Easily add a full Laravel blog (with built in admin panel and public views) to your laravel project with this simple package.
Stars: ✭ 198 (+108.42%)
Mutual labels:  eloquent, laravel, package
Plans
Laravel Plans is a package for SaaS apps that need management over plans, features, subscriptions, events for plans or limited, countable features.
Stars: ✭ 326 (+243.16%)
Mutual labels:  eloquent, laravel, package
Laravel Cascade Soft Deletes
Cascading deletes for Eloquent models that implement soft deletes
Stars: ✭ 498 (+424.21%)
Mutual labels:  eloquent, laravel, package
Laravel Translatable
A Laravel package for multilingual models
Stars: ✭ 624 (+556.84%)
Mutual labels:  eloquent, laravel, package
Laravel Nullable Fields
Handles saving empty fields as null for Eloquent models
Stars: ✭ 88 (-7.37%)
Mutual labels:  eloquent, laravel, package
Eloquent Sortable
Sortable behaviour for Eloquent models
Stars: ✭ 914 (+862.11%)
Mutual labels:  eloquent, laravel, trait
Schedule
Schedule is a package that helps tracking schedules for your models. If you have workers in a company, you can set schedules for them and see their availability though the time.
Stars: ✭ 155 (+63.16%)
Mutual labels:  eloquent, laravel, trait
Guardian
Eloquent Guardian is a simple permissions system for your users. While there are many other packages for permissions, this one solves everything in the most eloquent way.
Stars: ✭ 121 (+27.37%)
Mutual labels:  eloquent, laravel, package
Laravel Imageup
Auto Image & file upload, resize and crop for Laravel eloquent model using Intervention image
Stars: ✭ 646 (+580%)
Mutual labels:  eloquent, laravel, trait
Laravel Reviewable
Adds a reviewable feature to your laravel app.
Stars: ✭ 57 (-40%)
Mutual labels:  laravel, package, rating
Watchable
Enable users to watch various models in your application.
Stars: ✭ 65 (-31.58%)
Mutual labels:  eloquent, laravel, package
Manager
Implementation of the Manager pattern existing in Laravel framework
Stars: ✭ 74 (-22.11%)
Mutual labels:  laravel, package
Env Providers
👷 Load Laravel service providers based on your application's environment.
Stars: ✭ 73 (-23.16%)
Mutual labels:  laravel, package
Laravel Lucene Search
Laravel 4.2, 5.* package for full-text search over Eloquent models based on ZF2 Lucene.
Stars: ✭ 75 (-21.05%)
Mutual labels:  eloquent, laravel

Laravel Likeable

cog-laravel-likeable

Build Status StyleCI Releases License

Attention

This package is abandoned and no longer maintained. Development moved to Laravel Love package!

If you already have installed version of Laravel Likeable you can use Laravel Love Migration Guide.

Introduction

Laravel Likeable simplify management of Eloquent model's likes & dislikes. Make any model likeable & dislikeable in a minutes!

Contents

Features

  • Designed to work with Laravel Eloquent models.
  • Using contracts to keep high customization capabilities.
  • Using traits to get functionality out of the box.
  • Most part of the the logic is handled by the LikeableService.
  • Has Artisan command likeable:recount {model?} {type?} to re-fetch likes counters.
  • Likeable model can has Likes and Dislikes.
  • Likes and Dislikes for one model are mutually exclusive.
  • Get Likeable models ordered by likes count.
  • Events for like, unlike, dislike, undislike methods.
  • Following PHP Standard Recommendations:
  • Covered with unit tests.

Installation

First, pull in the package through Composer.

$ composer require cybercog/laravel-likeable

If you are using Laravel 5.5 you can skip register package part.

Register package on Laravel 5.4 and lower

Include the service provider within app/config/app.php.

'providers' => [
    Cog\Likeable\Providers\LikeableServiceProvider::class,
],

Perform Database Migration

At last you need to publish and run database migrations.

$ php artisan vendor:publish --provider="Cog\Likeable\Providers\LikeableServiceProvider" --tag=migrations
$ php artisan migrate

Usage

Prepare likeable model

Use Likeable contract in model which will get likes behavior and implement it or just use Likeable trait.

use Cog\Likeable\Contracts\Likeable as LikeableContract;
use Cog\Likeable\Traits\Likeable;
use Illuminate\Database\Eloquent\Model;

class Article extends Model implements LikeableContract
{
    use Likeable;
}

Available methods

Likes

Like model
$article->like(); // current user
$article->like($user->id);
Remove like mark from model
$article->unlike(); // current user
$article->unlike($user->id);
Toggle like mark of model
$article->likeToggle(); // current user
$article->likeToggle($user->id);
Get model likes count
$article->likesCount;
Get model likes counter
$article->likesCounter;
Get likes relation
$article->likes();
Get iterable Illuminate\Database\Eloquent\Collection of existing model likes
$article->likes;
Boolean check if user liked model
$article->liked; // current user
$article->liked(); // current user
$article->liked($user->id);

Checks in eager loaded relations likes & likesAndDislikes first.

Get collection of users who liked model
$article->collectLikers();
Delete all likes for model
$article->removeLikes();

Dislikes

Dislike model
$article->dislike(); // current user
$article->dislike($user->id);
Remove dislike mark from model
$article->undislike(); // current user
$article->undislike($user->id);
Toggle dislike mark of model
$article->dislikeToggle(); // current user
$article->dislikeToggle($user->id);
Get model dislikes count
$article->dislikesCount;
Get model dislikes counter
$article->dislikesCounter;
Get dislikes relation
$article->dislikes();
Get iterable Illuminate\Database\Eloquent\Collection of existing model dislikes
$article->dislikes;
Boolean check if user disliked model
$article->disliked; // current user
$article->disliked(); // current user
$article->disliked($user->id);

Checks in eager loaded relations dislikes & likesAndDislikes first.

Get collection of users who disliked model
$article->collectDislikers();
Delete all dislikes for model
$article->removeDislikes();

Likes and Dislikes

Get difference between likes and dislikes
$article->likesDiffDislikesCount;
Get likes and dislikes relation
$article->likesAndDislikes();
Get iterable Illuminate\Database\Eloquent\Collection of existing model likes and dislikes
$article->likesAndDislikes;

Scopes

Find all articles liked by user
Article::whereLikedBy($user->id)
    ->with('likesCounter') // Allow eager load (optional)
    ->get();
Find all articles disliked by user
Article::whereDislikedBy($user->id)
    ->with('dislikesCounter') // Allow eager load (optional)
    ->get();
Fetch Likeable models by likes count
$sortedArticles = Article::orderByLikesCount()->get();
$sortedArticles = Article::orderByLikesCount('asc')->get();

Uses desc as default order direction.

Fetch Likeable models by dislikes count
$sortedArticles = Article::orderByDislikesCount()->get();
$sortedArticles = Article::orderByDislikesCount('asc')->get();

Uses desc as default order direction.

Events

On each like added \Cog\Likeable\Events\ModelWasLiked event is fired.

On each like removed \Cog\Likeable\Events\ModelWasUnliked event is fired.

On each dislike added \Cog\Likeable\Events\ModelWasDisliked event is fired.

On each dislike removed \Cog\Likeable\Events\ModelWasUndisliked event is fired.

Console commands

Recount likes and dislikes of all model types
$ likeable:recount
Recount likes and dislikes of concrete model type (using morph map alias)
$ likeable:recount --model="article"
Recount likes and dislikes of concrete model type (using fully qualified class name)
$ likeable:recount --model="App\Models\Article"
Recount only likes of all model types
$ likeable:recount --type="like"
Recount only likes of concrete model type (using morph map alias)
$ likeable:recount --model="article" --type="like"
Recount only likes of concrete model type (using fully qualified class name)
$ likeable:recount --model="App\Models\Article" --type="like"
Recount only dislikes of all model types
$ likeable:recount --type="dislike"
Recount only dislikes of concrete model type (using morph map alias)
$ likeable:recount --model="article" --type="dislike"
Recount only dislikes of concrete model type (using fully qualified class name)
$ likeable:recount --model="App\Models\Article" --type="dislike"

Extending

You can override core classes of package with your own implementations:

  • Models\Like
  • Models\LikeCounter
  • Services\LikeableService

Note: Don't forget that all custom models must implement original models interfaces.

To make it you should use container binding interfaces to implementations in your application service providers.

Use model class own implementation
$this->app->bind(
    \Cog\Likeable\Contracts\Like::class,
    \App\Models\CustomLike::class
);
Use service class own implementation
$this->app->singleton(
    \Cog\Likeable\Contracts\LikeableService::class,
    \App\Services\CustomService::class
);

After that your CustomLike and CustomService classes will be instantiable with helper method app().

$model = app(\Cog\Likeable\Contracts\Like::class);
$service = app(\Cog\Likeable\Contracts\LikeableService::class);

Change log

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

Contributing

Please see CONTRIBUTING for details.

Testing

You can run the tests with:

$ vendor/bin/phpunit

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

Contributors

@antonkomarev
Anton Komarev
@acidjazz
Kevin Olson

Laravel Likeable contributors list

Alternatives

Feel free to add more alternatives as Pull Request.

License

About CyberCog

CyberCog is a Social Unity of enthusiasts. Research best solutions in product & software development is our passion.

CyberCog

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].