hkp22 / laravel-reactions
Requires
- php: ^7.0
- illuminate/database: ~5.5|~5.6|~5.7|~5.8|^6.0|^7.0|^8.0
- illuminate/support: ~5.5|~5.6|~5.7|~5.8|^6.0|^7.0|^8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.10
- orchestra/testbench: ~3.5.0|~3.6.0|~3.7.0|~3.8.0|^4.0|^5.0|^6.0
- phpunit/phpunit: ^7.5|^8.0|^9.0
This package is auto-updated.
Last update: 2022-02-01 13:14:10 UTC
README
Laravel 反应包,用于在 Eloquent 模型上实现点赞、踩、喜欢等反应功能。
视频教程
安装
使用 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