itbm / laravel-likeable
让 Laravel Eloquent 模型在几分钟内实现点赞和点踩功能!
Requires
- php: ^7.0|^8.0
- laravel/framework: ^6.0|^7.0|^8.0|^9.0|^10.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^1.11
- mockery/mockery: ^0.9.8|^1.3.1
- orchestra/database: ~3.4.0|~3.5.0
- orchestra/testbench: ~3.4.0|~3.5.0
- phpunit/phpunit: ^5.7|^6.0|^7.0|^8.0|^9.0
Suggests
- cybercog/laravel-love: Completely refactored Laravel Likeable package.
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 itbm/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 而不是使用问题跟踪器。
贡献者
替代方案
- cybercog/laravel-love
- rtconner/laravel-likeable
- faustbrian/laravel-likeable
- sukohi/evaluation
- zvermafia/lavoter
请随意添加更多替代方案作为拉取请求。
许可证
Laravel Likeable
包是开源软件,由 MIT 许可证 下 Anton Komarev 许可。
关于 CyberCog
CyberCog 是一个由爱好者组成的社交联盟。研究产品与软件开发中的最佳解决方案是我们的热情所在。