qirolab/laravel-reactions

在 Laravel Eloquent 模型上实现反应功能(如点赞、不喜欢、喜爱、情感等)。

3.0.0 2024-06-11 09:51 UTC

README

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

Laravel 反应包,用于在 Eloquent 模型上实现反应功能(例如:点赞、不喜欢、喜爱、情感等)。

视频教程

▶️ Laravel 反应教程

安装

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

composer require qirolab/laravel-reactions

注册包

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

对于 Laravel 5.4 或更早版本,在 app/config/app.php 中包含 ServiceProvider。

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

数据库迁移

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

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

运行数据库迁移。

php artisan migrate

配置文件

您可以选择使用以下方式发布配置文件:

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

使用方法

准备反应(用户)模型

在模型中使用 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);

切换反应

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

如果用户已对 like 进行了反应,则在切换反应时使用 like。它将删除反应。

$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

Spec Coder