2017 © Pedro Peláez
 

library laravel-likeable

Make Laravel Eloquent models Likeable & Dislikeable in a minutes!

image

cybercog/laravel-likeable

Make Laravel Eloquent models Likeable & Dislikeable in a minutes!

  • Monday, February 19, 2018
  • by a-komarev
  • Repository
  • 4 Watchers
  • 75 Stars
  • 2,151 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 9 Forks
  • 1 Open issues
  • 18 Versions
  • 8 % Grown

The README.md

Laravel Likeable

cog-laravel-likeable, (*1)

Build Status StyleCI Releases License , (*2)

Attention

This package is abandoned and no longer maintained. Development moved to Laravel Love package!, (*3)

If you already have installed version of Laravel Likeable you can use Laravel Love Migration Guide., (*4)

Introduction

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

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., (*6)

$ composer require cybercog/laravel-likeable

If you are using Laravel 5.5 you can skip register package part., (*7)

Register package on Laravel 5.4 and lower

Include the service provider within app/config/app.php., (*8)

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

Perform Database Migration

At last you need to publish and run database migrations., (*9)

$ 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., (*10)

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., (*11)

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., (*12)

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., (*13)

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

Uses desc as default order direction., (*14)

Events

On each like added \Cog\Likeable\Events\ModelWasLiked event is fired., (*15)

On each like removed \Cog\Likeable\Events\ModelWasUnliked event is fired., (*16)

On each dislike added \Cog\Likeable\Events\ModelWasDisliked event is fired., (*17)

On each dislike removed \Cog\Likeable\Events\ModelWasUndisliked event is fired., (*18)

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:, (*19)

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

Note: Don't forget that all custom models must implement original models interfaces., (*20)

To make it you should use container binding interfaces to implementations in your application service providers., (*21)

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()., (*22)

$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., (*23)

Contributing

Please see CONTRIBUTING for details., (*24)

Testing

You can run the tests with:, (*25)

$ vendor/bin/phpunit

Security

If you discover any security related issues, please email open@cybercog.su instead of using the issue tracker., (*26)

Contributors

@antonkomarev
Anton Komarev
@acidjazz
Kevin Olson

Laravel Likeable contributors list, (*27)

Alternatives

Feel free to add more alternatives as Pull Request., (*28)

License

About CyberCog

CyberCog is a Social Unity of enthusiasts. Research best solutions in product & software development is our passion., (*29)

CyberCog, (*30)

The Versions

19/02 2018

dev-master

9999999-dev https://github.com/cybercog/laravel-likeable

Make Laravel Eloquent models Likeable & Dislikeable in a minutes!

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel eloquent trait rating rate like favorite likeable likable favourite star cog cybercog dislike kudos emotion

29/12 2017

3.1.0

3.1.0.0 https://github.com/cybercog/laravel-likeable

Make Laravel Eloquent models Likeable & Dislikeable in a minutes!

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel eloquent trait rating rate like favorite likeable likable favourite star cog cybercog dislike kudos emotion

02/09 2017

3.0.1

3.0.1.0 https://github.com/cybercog/laravel-likeable

Make Laravel Eloquent models Likeable & Dislikeable in a minutes!

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel eloquent trait rating rate like favorite likeable likable favourite star cog cybercog dislike kudos emotion

27/08 2017

dev-release/4.0.0

dev-release/4.0.0 https://github.com/cybercog/laravel-likeable

Make Laravel Eloquent models Likeable & Dislikeable in a minutes!

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel eloquent trait rating rate like favorite likeable likable favourite star cog cybercog dislike kudos emotion

27/08 2017

3.0.0

3.0.0.0 https://github.com/cybercog/laravel-likeable

Make Laravel Eloquent models Likeable & Dislikeable in a minutes!

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel eloquent trait rating rate like favorite likeable likable favourite star cog cybercog dislike kudos emotion

10/07 2017

2.2.5

2.2.5.0 https://github.com/cybercog/laravel-likeable

Trait for Laravel Eloquent models to allow easy implementation of a `like` & `dislike` features.

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel eloquent trait rating rate like favorite likeable likable favourite cog cybercog dislike emotion

20/04 2017

2.2.4

2.2.4.0 https://github.com/cybercog/laravel-likeable

Trait for Laravel Eloquent models to allow easy implementation of a `like` & `dislike` features.

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel eloquent trait rating rate like favorite likeable likable favourite cog cybercog dislike emotion

20/04 2017

2.2.3

2.2.3.0 https://github.com/cybercog/laravel-likeable

Trait for Laravel Eloquent models to allow easy implementation of a `like` & `dislike` features.

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel eloquent trait rating rate like favorite likeable likable favourite cog cybercog dislike emotion

09/04 2017

2.2.2

2.2.2.0 https://github.com/cybercog/laravel-likeable

Trait for Laravel Eloquent models to allow easy implementation of a `like` & `dislike` features.

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel eloquent trait rating rate like favorite likeable likable favourite cog cybercog dislike emotion

09/04 2017

2.2.1

2.2.1.0 https://github.com/cybercog/laravel-likeable

Trait for Laravel Eloquent models to allow easy implementation of a `like` & `dislike` features.

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel eloquent trait rating rate like favorite likeable likable favourite cog cybercog dislike emotion

09/04 2017

2.2.0

2.2.0.0 https://github.com/cybercog/laravel-likeable

Trait for Laravel Eloquent models to allow easy implementation of a `like` & `dislike` features.

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel eloquent trait rating rate like favorite likeable likable favourite cog cybercog dislike emotion

20/02 2017

2.1.0

2.1.0.0 https://github.com/cybercog/laravel-likeable

Trait for Laravel Eloquent models to allow easy implementation of a `like` & `dislike` features.

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel eloquent trait rating rate like favorite likeable likable favourite dislike

11/01 2017

2.0.1

2.0.1.0

Trait for Laravel Eloquent models to allow easy implementation of a `like` & `dislike` features.

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

laravel eloquent trait rating rate like favorite likeable likable favourite dislike

11/09 2016

2.0.0

2.0.0.0

Trait for Laravel Eloquent models to allow easy implementation of a `like` & `dislike` features.

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

laravel eloquent trait rating rate like favorite likeable likable favourite dislike

07/09 2016

1.1.2

1.1.2.0

Trait for Laravel Eloquent models to allow easy implementation of a `like` & `dislike` features.

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

laravel eloquent trait rating rate like favorite likeable likable favourite dislike

07/09 2016

1.1.1

1.1.1.0

Trait for Laravel Eloquent models to allow easy implementation of a `like` & `dislike` features.

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

laravel eloquent trait rating rate like favorite likeable likable favourite dislike

07/09 2016

1.1.0

1.1.0.0

Trait for Laravel Eloquent models to allow easy implementation of a `like` & `dislike` features.

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

laravel eloquent trait rating rate like favorite likeable likable favourite dislike

06/09 2016

1.0.0

1.0.0.0

Trait for Laravel Eloquent models to allow easy implementation of a `like` & `dislike` features.

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

laravel eloquent trait rating rate like favorite likeable likable favourite dislike