raomingchao/oc-laravel-follow

Laravel 5 用户系统

1.1.4 2018-03-05 05:57 UTC

This package is not auto-updated.

Last update: 2024-09-23 03:36:48 UTC


README

❤️ 此包可以帮助您将基于用户的关注系统添加到您的模型中。

Build Status Latest Stable Version Latest Unstable Version Build Status Scrutinizer Code Quality Code Coverage Total Downloads License

特性

  • 支持操作
    • 关注
    • 点赞
    • 订阅
    • 收藏
    • 投票(赞同 & 反对)

安装

您可以使用composer安装此包

$ composer require overtrue/laravel-follow -vvv

然后,将服务提供者添加到config/app.php

Overtrue\LaravelFollow\FollowServiceProvider::class

发布迁移文件

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

作为可选步骤,如果您想修改默认配置,可以发布配置文件

$ php artisan vendor:publish --provider='Overtrue\LaravelFollow\FollowServiceProvider' --tag="config"

并创建表

$ php artisan migrate

最后,将特性特质添加到User模型中

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

class User extends Model
{
    use CanFollow, CanBeFollowed;
}

使用

CanXXX特质添加到User模型中。

use Overtrue\LaravelFollow\Traits\CanFollow;
use Overtrue\LaravelFollow\Traits\CanLike;
use Overtrue\LaravelFollow\Traits\CanFavorite;
use Overtrue\LaravelFollow\Traits\CanSubscribe;
use Overtrue\LaravelFollow\Traits\CanVote;

class User extends Model
{
    use CanFollow, CanLike, CanFavorite, CanSubscribe, CanVote;
}

CanBeXXX特质添加到目标模型,例如'Post'或'Music'...

use Overtrue\LaravelFollow\Traits\CanBeLiked;
use Overtrue\LaravelFollow\Traits\CanBeFavorited;
use Overtrue\LaravelFollow\Traits\CanBeVoted;

class Post extends Model
{
    use CanBeLiked, CanBeFavorited, CanBeVoted;
}

所有可用的API列表如下。

关注

\Overtrue\LaravelFollow\Traits\CanFollow

$user->follow($targets)
$user->unfollow($targets)
$user->toggleFollow($targets)
$user->followings()->get() // App\User:class
$user->followings(App\Post::class)->get()
$user->isFollowing($target)

\Overtrue\LaravelFollow\Traits\CanBeFollowed

$object->followers()->get()
$object->isFollowedBy($user)

点赞

\Overtrue\LaravelFollow\Traits\CanLike

$user->like($targets)
$user->unlike($targets)
$user->toggleLike($targets)
$user->hasLiked($target)
$user->likes()->get() // default object: App\User:class
$user->likes(App\Post::class)->get()

\Overtrue\LaravelFollow\Traits\CanBeLiked

$object->likers()->get() // or $object->likers
$object->fans()->get() // or $object->fans
$object->isLikedBy($user)

收藏

\Overtrue\LaravelFollow\Traits\CanFavorite

$user->favorite($targets)
$user->unfavorite($targets)
$user->toggleFavorite($targets)
$user->hasFavorited($target)
$user->favorites()->get() // App\User:class
$user->favorites(App\Post::class)->get()

\Overtrue\LaravelFollow\Traits\CanBeFavorited

$object->favoriters()->get() // or $object->favoriters 
$object->isFavoritedBy($user)

订阅

\Overtrue\LaravelFollow\Traits\CanSubscribe

$user->subscribe($targets)
$user->unsubscribe($targets)
$user->toggleSubscribe($targets)
$user->hasSubscribed($target)
$user->subscriptions()->get() // default object: App\User:class
$user->subscriptions(App\Post::class)->get()

Overtrue\LaravelFollow\Traits\CanBeSubscribed

$object->subscribers() // or $object->subscribers 
$object->isSubscribedBy($user)

投票

\Overtrue\LaravelFollow\Traits\CanVote

$user->vote($target) // Vote with 'upvote' for default
$user->upvote($target)
$user->downvote($target)
$user->cancelVote($target)
$user->hasUpvoted($target)
$user->hasDownvoted($target)
$user->votes(App\Post::class)->get()
$user->upvotes(App\Post::class)->get()
$user->downvotes(App\Post::class)->get()

\Overtrue\LaravelFollow\Traits\CanBeVoted

$object->voters()->get()
$object->upvoters()->get()
$object->downvoters()->get()
$object->isVotedBy($user)
$object->isUpvotedBy($user)
$object->isDownvotedBy($user)

参数

上述创建关系的所有方法,如'follow'、'like'、'unfollow'、'unlike',其语法如下

follow(array|int|\Illuminate\Database\Eloquent\Model $targets, $class = __CLASS__)

所以您可以这样调用它们

// Id / Id array
$user->follow(1); // targets: 1, $class = App\User
$user->follow(1, App\Post::class); // targets: 1, $class = App\Post
$user->follow([1, 2, 3]); // targets: [1, 2, 3], $class = App\User

// Model
$post = App\Post::find(7);
$user->follow($post); // targets: $post->id, $class = App\Post

// Model array
$posts = App\Post::popular()->get();
$user->follow($posts); // targets: [1, 2, ...], $class = App\Post

查询关系

$followers = $user->followers
$followers = $user->followers()->where('id', '>', 10)->get()
$followers = $user->followers()->orderByDesc('id')->get()

其他用法相同。

与模型一起工作。

use Overtrue\LaravelFollow\FollowRelation;

// get most popular object

// all types
$relations = FollowRelation::popular()->get();

// followable_type = App\Post
$relations = FollowRelation::popular(App\Post::class)->get(); 

// followable_type = App\User
$relations = FollowRelation::popular('user')->get();
 
// followable_type = App\Post
$relations = FollowRelation::popular('post')->get();

// Pagination
$relations = FollowRelation::popular(App\Post::class)->paginate(15); 

许可

MIT