loafer / laravel-likeable
在几分钟内让Laravel Eloquent模型可点赞和取消点赞!
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处理。 - 有Artisan命令
likeable:recount {model?} {type?}以重新获取点赞计数。 - 点赞模型可以有点赞和取消点赞。
- 一个模型的点赞和取消点赞是互斥的。
- 按点赞数获取排序的点赞模型。
- 为
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();
默认按降序排序。
根据踩数获取可点赞模型
$sortedArticles = Article::orderByDislikesCount()->get(); $sortedArticles = Article::orderByDislikesCount('asc')->get();
默认按降序排序。
事件
每次添加点赞时,触发 \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\LikeModels\LikeCounterServices\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 );
之后,您的 CustomLike 和 CustomService 类就可以通过辅助方法 app() 来实例化了。
$model = app(\Cog\Likeable\Contracts\Like::class); $service = app(\Cog\Likeable\Contracts\LikeableService::class);
变更日志
有关最近变更的详细信息,请参阅CHANGELOG。
贡献
有关详细信息,请参阅CONTRIBUTING。
测试
您可以使用以下命令运行测试:
$ vendor/bin/phpunit
安全
如果您发现任何安全相关的问题,请通过电子邮件open@cybercog.su联系,而不是使用问题跟踪器。
贡献者
替代方案
- cybercog/laravel-love
- rtconner/laravel-likeable
- faustbrian/laravel-likeable
- sukohi/evaluation
- zvermafia/lavoter
您可以自由地通过拉取请求添加更多替代方案。
许可证
Laravel Likeable包是开源软件,由 MIT 许可授权,由 Anton Komarev 提供。
关于 CyberCog
CyberCog 是一个由爱好者组成的社交联盟。研究产品与软件开发中的最佳解决方案是我们的热情。

