qirolab / laravel-reactions
在 Laravel Eloquent 模型上实现反应功能(如点赞、不喜欢、喜爱、情感等)。
Requires
- php: >=7.3
- illuminate/database: ^8.0|^9.0|^10.0|^11.0
- illuminate/events: ^8.0|^9.0|^10.0|^11.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^6.0|^7.0|^8.0|^9.0
- phpunit/phpunit: ^8.5|^9.0|^10.5
- vimeo/psalm: ^4.0|^5.22
This package is auto-updated.
Last update: 2024-09-11 10:24:24 UTC
README
Laravel 反应包,用于在 Eloquent 模型上实现反应功能(例如:点赞、不喜欢、喜爱、情感等)。
视频教程
安装
使用 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