簡化你的關注與點贊 - Laravel Follow & Vote

cjjian發表於2017-04-12

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

本作品採用《CC 協議》,轉載必須註明作者和本文連結
Nothing is impossible. —— @Jiajian Chan

相關文章