cybercog/laravel-likeable

此包已被弃用且不再维护。作者建议使用cybercog/laravel-love包。

让Laravel Eloquent模型在几分钟内变得可点赞和可点踩!

3.1.0 2017-12-28 23:45 UTC

This package is not auto-updated.

Last update: 2022-02-01 13:01:14 UTC


README

cog-laravel-likeable

Build Status StyleCI Releases License

注意

此包已被弃用且不再维护。开发已转移到Laravel Love包

如果您已安装Laravel Likeable版本,您可以使用Laravel Love迁移指南

介绍

Laravel Likeable简化了Eloquent模型点赞和点踩的管理。让任何模型在几分钟内变得可点赞和可点踩!

内容

特性

  • 专为与Laravel Eloquent模型协同工作而设计。
  • 使用合约以保持高度定制能力。
  • 使用特性以获得开箱即用的功能。
  • 大部分逻辑由LikeableService处理。
  • 具有likeable:recount {model?} {type?} artisan命令,用于重新获取点赞计数。
  • 点赞模型可以有赞和踩。
  • 一个模型的赞和踩是互斥的。
  • 获取按点赞数排序的点赞模型。
  • likeunlikedislikeundislike方法提供事件。
  • 遵循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);

首先检查预加载关系likeslikesAndDislikes

获取点赞该模型的用户集合
$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);

首先检查预加载关系dislikeslikesAndDislikes

获取不喜欢该模型的用户集合
$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() 实例化 CustomLikeCustomService 类。

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

变更日志

有关最近更改的详细信息,请参阅 CHANGELOG

贡献

有关详细信息,请参阅 CONTRIBUTING

测试

您可以使用以下命令运行测试:

$ vendor/bin/phpunit

安全

如果您发现任何与安全相关的问题,请通过电子邮件 open@cybercog.su 而不是使用问题跟踪器来报告。

贡献者

@antonkomarev
Anton Komarev
@acidjazz
Kevin Olson

Laravel Likeable 贡献者名单

替代方案

您可以自由地通过拉取请求添加更多替代方案。

许可证

关于 CyberCog

CyberCog 是一个由爱好者组成的社交联盟。研究产品与软件开发中的最佳解决方案是我们的热情所在。

CyberCog