简化你的关注与点赞 - Laravel Follow & Vote

Laravel Follow & Vote

本文主要介绍两个包:

Laravel - Follow : https://github.com/overtrue/laravel-follow

Laravel - Vote : https://github.com/jcc/laravel-vote

你会疑惑这两个包有什么用的呢?当然如标题所说,简化你关注和点赞功能,Laravel - Follow 用于关注功能,Laravel - Vote 用于点赞功能。

如果你看了代码,你会发现两个包的代码基本上是一致的,当要注意,两个包的应用场景是不一样的。

Laravel - Follow 之前的版本只支持用户关注,当然最近也做了一些改造工作,实现了多种情景下的应用,如:专栏关注、用户关注等情景。

当然,Laravel - Vote 也支持多种情景的应用,如:文章点赞、评论回复点赞等。废话不多说,下面我简单介绍一下两个包的用法吧。

安装

Laravel Follow

使用 composer 安装包:

composer require overtrue/laravel-follow -vvv

添加服务提供者到 config/app.php 下:

Overtrue\LaravelFollow\FollowServiceProvider::class

发布迁移文件:

php artisan vendor:publish --provider="Overtrue\LaravelFollow\FollowServiceProvider" --tag="migrations"

Laravel Vote

使用 composer 安装包:

composer require jcc/laravel-vote -vvv

添加服务提供者到 config/app.php 下:

Jcc\LaravelVote\VoteServiceProvider::class

发布迁移文件:

php artisan vendor:publish --provider="Jcc\LaravelVote\VoteServiceProvider" --tag="migrations"

用法

当然用法也是非常的简单,你无需顾虑它们间的关联关系。

Laravel Follow

应用场景:用户关注用户

首先,在 User 模型中引入 CanFollow 以及 CanBeFollowed

use Overtrue\LaravelFollow\CanFollow;
use Overtrue\LaravelFollow\CanBeFollowed;

class User extends Model
{
    use CanFollow, CanBeFollowed;
}

关注用户:

$user->follow(1);

// or

$user->follow([1,2,3,4]);

// or

$target = User::find(2);

$user->follow($target);

取消关注用户:

$user->unfollow(1);

// or

$user->unfollow([1,2,3,4]);

// or

$target = User::find(2);

$user->unfollow($target);

获取用户的关注者:

$user->followers();

获取用户关注的用户:

$user->followings();

判断用户是否关注了:

$user->isFollowing(1);

// or

$target = User::find(1);

$user->isFollowing($target);

判断用户是否被关注了:

$user->isFollowedBy(1);

Laravel Vote

应用场景:用户点赞文章

只需在 User 模型中引入 Vote ,在 Post 模型引入 CanBeVoted

User.php

use Jcc\LaravelVote\Vote;

class User extends Model
{
    use Vote;
}

Post.php

use Jcc\LaravelVote\CanBeVoted;

class Post extends Model
{
    use CanBeVoted;
}

针对 User.php 的操作

用户点赞文章:

$post = Post::find(1);

$user->upVote($post);

用户取消点赞文章:

$post = Post::find(1);

$user->cancelVote($post);

获取用户已点赞的记录:

$user->votedItems();

判断是否已点赞:

$post = Post::find(1);

$user->hasVoted($post);

针对文章的操作

获取所有点赞的用户:

$post->voters();

判断用户是否有点赞:

$post->isVotedBy(1);

至此,你可以愉快使用这两个包,当然,你需要按照你所需的应用场景使用,而不是乱用(Follow 当成 Vote 使用等)。还有的是这里使用了 Trait如何去理解以及更好地使用 Trait — By Overtrue

最后,当然是要感谢超哥 overtrue

经讨论
Laravel Follow
FollowTrait 更名为 CanFollow
FollowerTrait 更名为 CanBeFollowed

Laravel Vote
VoteTrait 更名为 Vote
VoterTrait 更名为 CanBeVoted

二次讨论
首先感谢 @iVanilla。

Laravel Vote 中的 Vote 是投票、表决的意思,那么投票、表决,有赞同当然也有反对。

So Laravel Vote v1.1.0 做了如下的改变,让此包定位更明确:

  • 增加一个字段 type(区分赞同、反对类型)
  • 增加如下方法:
    • downVote() —— 投反对票
    • hasUpVoted() —— 判断是否有赞同票
    • hasDownVoted() —— 判断是否有反对票
    • countUpVoters() —— 计算赞同票数
    • countDownVoters() —— 计算反对票数
    • countVoters() —— 计算所有票数

详细用法请看 Laravel-vote 的 README.md

Nothing is impossible. —— @Jiajian Chan