cybercog / laravel-likeable
Requires
- php: ^5.6|^7.0
- illuminate/database: ~5.1.20|~5.2|~5.3|~5.4|~5.5
- illuminate/support: ~5.1.20|~5.2|~5.3|~5.4|~5.5
Requires (Dev)
- friendsofphp/php-cs-fixer: ^1.11
- mockery/mockery: ^0.9.8
- orchestra/database: ~3.4.0|~3.5.0
- orchestra/testbench: ~3.4.0|~3.5.0
- phpunit/phpunit: ^5.7|^6.0
README
注意
此包已被弃用且不再维护。开发已转移到Laravel Love包!
如果您已安装Laravel Likeable版本,您可以使用Laravel Love迁移指南。
介绍
Laravel Likeable简化了Eloquent模型点赞和点踩的管理。让任何模型在几分钟内变得可点赞和可点踩!
内容
特性
- 专为与Laravel Eloquent模型协同工作而设计。
- 使用合约以保持高度定制能力。
- 使用特性以获得开箱即用的功能。
- 大部分逻辑由
LikeableService
处理。 - 具有
likeable:recount {model?} {type?}
artisan命令,用于重新获取点赞计数。 - 点赞模型可以有赞和踩。
- 一个模型的赞和踩是互斥的。
- 获取按点赞数排序的点赞模型。
- 为
like
、unlike
、dislike
、undislike
方法提供事件。 - 遵循PHP标准推荐
- 覆盖单元测试。
安装
首先,通过Composer引入包。
$ composer require cybercog/laravel-likeable
如果您使用Laravel 5.5,可以跳过注册包的部分。
在Laravel 5.4及以下版本上注册包
在app/config/app.php
中包含服务提供者。
'providers' => [ Cog\Likeable\Providers\LikeableServiceProvider::class, ],
执行数据库迁移
最后,您需要发布并运行数据库迁移。
$ php artisan vendor:publish --provider="Cog\Likeable\Providers\LikeableServiceProvider" --tag=migrations
$ php artisan migrate
用法
准备点赞模型
在模型中使用Likeable
合约以获取点赞行为并实现它,或者只需使用Likeable
特性。
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; }
可用方法
点赞
点赞模型
$article->like(); // current user $article->like($user->id);
从模型移除点赞标记
$article->unlike(); // current user $article->unlike($user->id);
切换模型的点赞标记
$article->likeToggle(); // current user $article->likeToggle($user->id);
获取模型的点赞数
$article->likesCount;
获取模型的点赞计数器
$article->likesCounter;
获取点赞关系
$article->likes();
获取现有模型点赞的Illuminate\Database\Eloquent\Collection
的可迭代对象
$article->likes;
布尔检查用户是否点赞模型
$article->liked; // current user $article->liked(); // current user $article->liked($user->id);
首先检查预加载关系likes
和likesAndDislikes
。
获取点赞该模型的用户集合
$article->collectLikers();
删除模型的全部点赞
$article->removeLikes();
不喜欢
不喜欢模型
$article->dislike(); // current user $article->dislike($user->id);
从模型移除不喜欢标记
$article->undislike(); // current user $article->undislike($user->id);
切换模型的不喜欢标记
$article->dislikeToggle(); // current user $article->dislikeToggle($user->id);
获取模型的不喜欢数
$article->dislikesCount;
获取模型的不喜欢计数器
$article->dislikesCounter;
获取不喜欢关系
$article->dislikes();
获取现有模型不喜欢的Illuminate\Database\Eloquent\Collection
的可迭代对象
$article->dislikes;
布尔检查用户是否不喜欢模型
$article->disliked; // current user $article->disliked(); // current user $article->disliked($user->id);
首先检查预加载关系dislikes
和likesAndDislikes
。
获取不喜欢该模型的用户集合
$article->collectDislikers();
删除模型的全部不喜欢
$article->removeDislikes();
点赞和不喜欢
获取点赞和不喜欢之间的差异
$article->likesDiffDislikesCount;
获取点赞和不喜欢关系
$article->likesAndDislikes();
获取现有模型点赞和不喜欢Illuminate\Database\Eloquent\Collection
的可迭代对象
$article->likesAndDislikes;
作用域
查找用户喜欢的所有文章
Article::whereLikedBy($user->id) ->with('likesCounter') // Allow eager load (optional) ->get();
查找用户不喜欢的所有文章
Article::whereDislikedBy($user->id) ->with('dislikesCounter') // Allow eager load (optional) ->get();
按点赞数获取可点赞模型
$sortedArticles = Article::orderByLikesCount()->get(); $sortedArticles = Article::orderByLikesCount('asc')->get();
默认排序方向使用desc
。
按踩数获取可点赞模型
$sortedArticles = Article::orderByDislikesCount()->get(); $sortedArticles = Article::orderByDislikesCount('asc')->get();
默认排序方向使用desc
。
事件
每次添加点赞时,触发\Cog\Likeable\Events\ModelWasLiked
事件。
每次移除点赞时,触发\Cog\Likeable\Events\ModelWasUnliked
事件。
每次添加踩时,触发\Cog\Likeable\Events\ModelWasDisliked
事件。
每次移除踩时,触发\Cog\Likeable\Events\ModelWasUndisliked
事件。
控制台命令
重新计算所有模型类型的点赞和踩数
$ likeable:recount
使用形态映射别名重新计算具体模型类型的点赞和踩数
$ likeable:recount --model="article"
使用完全限定类名重新计算具体模型类型的点赞和踩数
$ likeable:recount --model="App\Models\Article"
仅重新计算所有模型类型的点赞数
$ likeable:recount --type="like"
使用形态映射别名仅重新计算具体模型类型的点赞数
$ likeable:recount --model="article" --type="like"
使用完全限定类名仅重新计算具体模型类型的点赞数
$ likeable:recount --model="App\Models\Article" --type="like"
仅重新计算所有模型类型的踩数
$ likeable:recount --type="dislike"
使用形态映射别名仅重新计算具体模型类型的踩数
$ likeable:recount --model="article" --type="dislike"
使用完全限定类名仅重新计算具体模型类型的踩数
$ likeable:recount --model="App\Models\Article" --type="dislike"
扩展
你可以使用自己的实现来覆盖包的核心类。
Models\Like
Models\LikeCounter
Services\LikeableService
注意:不要忘记所有自定义模型都必须实现原始模型接口。
为了做到这一点,你应该在你的应用程序服务提供者中使用容器将接口绑定到实现。
使用模型类的自身实现
$this->app->bind( \Cog\Likeable\Contracts\Like::class, \App\Models\CustomLike::class );
使用服务类自实现
$this->app->singleton( \Cog\Likeable\Contracts\LikeableService::class, \App\Services\CustomService::class );
之后,您可以使用辅助方法 app()
实例化 CustomLike
和 CustomService
类。
$model = app(\Cog\Likeable\Contracts\Like::class); $service = app(\Cog\Likeable\Contracts\LikeableService::class);
变更日志
有关最近更改的详细信息,请参阅 CHANGELOG。
贡献
有关详细信息,请参阅 CONTRIBUTING。
测试
您可以使用以下命令运行测试:
$ vendor/bin/phpunit
安全
如果您发现任何与安全相关的问题,请通过电子邮件 open@cybercog.su 而不是使用问题跟踪器来报告。
贡献者
Anton Komarev |
Kevin Olson |
---|
替代方案
- cybercog/laravel-love
- rtconner/laravel-likeable
- faustbrian/laravel-likeable
- sukohi/evaluation
- zvermafia/lavoter
您可以自由地通过拉取请求添加更多替代方案。
许可证
Laravel Likeable
软件包是开源软件,由 MIT 许可许可,由 Anton Komarev 提供。
关于 CyberCog
CyberCog 是一个由爱好者组成的社交联盟。研究产品与软件开发中的最佳解决方案是我们的热情所在。