hkp22/laravel-reactions

此包已废弃,不再维护。作者建议使用 qirolab/laravel-reactions 包。

在 Laravel Eloquent 模型上实现点赞、踩、喜欢等反应功能。

赞助包维护!
其他

2.5.0 2020-09-09 12:09 UTC

This package is auto-updated.

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


README

68747470733a2f2f692e696d6775722e636f6d2f525141707939362e706e67

Latest Version on Packagist GitHub Tests Action Status Styling Psalm Total Downloads

Laravel 反应包,用于在 Eloquent 模型上实现点赞、踩、喜欢等反应功能。

视频教程

▶️ Laravel Reactions 教程

安装

使用 Composer 将包下载到项目中。

$ composer require qirolab/laravel-reactions

注册包

Laravel 5.5(或更高版本)使用包自动发现,因此不需要您手动添加 ServiceProvider。

对于 Laravel 5.4 或更早版本,在 app/config/app.php 中包含服务提供者。

'providers' => [
    Qirolab\Laravel\Reactions\ReactionsServiceProvider::class,
],

数据库迁移

如果您想更改迁移,请首先将它们发布到您的应用程序中。

$ php artisan vendor:publish --provider="Qirolab\Laravel\Reactions\ReactionsServiceProvider" --tag=migrations

运行数据库迁移。

$ php artisan migrate

使用方法

准备反应(用户)模型

在将执行反应行为的反应模型中,使用 Qirolab\Laravel\Reactions\Contracts\ReactsInterface 接口并实现它,并使用 Qirolab\Laravel\Reactions\Traits\Reacts 特性。

use Qirolab\Laravel\Reactions\Traits\Reacts;
use Qirolab\Laravel\Reactions\Contracts\ReactsInterface;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements ReactsInterface
{
    use Reacts;
}

准备反应模型

在将获取反应行为的模型中使用 Qirolab\Laravel\Reactions\Contracts\ReactableInterface 接口并实现它,并使用 Qirolab\Laravel\Reactions\Traits\Reactable 特性。

use Illuminate\Database\Eloquent\Model;
use Qirolab\Laravel\Reactions\Traits\Reactable;
use Qirolab\Laravel\Reactions\Contracts\ReactableInterface;

class Article extends Model implements ReactableInterface
{
    use Reactable;
}

可用方法

反应

$user->reactTo($article, 'like');

$article->react('like'); // current login user
$article->react('like', $user);

移除反应

从可反应模型中移除用户的反应。

$user->removeReactionFrom($article);

$article->removeReaction(); // current login user
$article->removeReaction($user);

切换反应

切换反应方法将在用户未进行反应时向模型添加反应。如果用户已进行反应,则将替换之前的反应为新反应。例如,如果用户在模型上点了赞。现在在切换反应为“踩”时,它将移除“赞”并存储“踩”反应。

如果用户点了赞,则在切换反应时使用“赞”。它将移除反应。

$user->toggleReactionOn($article, 'like');

$article->toggleReaction('like'); // current login user
$article->toggleReaction('like', $user);

布尔检查用户是否对模型有反应

$user->isReactedOn($article));

$article->is_reacted; // current login user
$article->isReactBy(); // current login user
$article->isReactBy($user);

模型上的反应摘要

$article->reactionSummary();
$article->reaction_summary;

// example
$article->reaction_summary->toArray();
// output
/*
[
    "like" => 5,
    "dislike" => 2,
    "clap" => 4,
    "hooray" => 1
]
*/

获取对模型作出反应的用户集合

$article->reactionsBy();

作用域

查找用户所反应的所有文章。

Article::whereReactedBy()->get(); // current login user

Article::whereReactedBy($user)->get();
Article::whereReactedBy($user->id)->get();

模型反应

// It will return the Reaction object that is reacted by given user.
$article->reacted($user);
$article->reacted(); // current login user
$article->reacted; // current login user

$user->reactedOn($article);

事件

每当添加反应时,将触发 \Qirolab\Laravel\Reactions\Events\OnReaction 事件。

每当删除反应时,将触发 \Qirolab\Laravel\Reactions\Events\OnDeleteReaction 事件。

测试

使用以下命令运行测试:

$ vendor/bin/phpunit