hypefactors/laravel-follow

Laravel 9 Eloquent 模型关注系统。

v9.0.0 2023-07-22 09:44 UTC

README

Build Status Software License Latest Version on Packagist Total Downloads

Laravel 10 Eloquent 模型关注系统。

此包符合 FIG 标准 PSR-1PSR-2PSR-4,以确保共享 PHP 之间的高度互操作性。如果您发现任何合规性问题,请通过拉取请求发送补丁。

版本矩阵

安装

您可以通过 composer 安装此包

composer require hypefactors/laravel-follow

该包将被自动注册。

现在您需要运行迁移

php artisan migrate

用法

准备 Eloquent 模型

要允许一个实体关注其他实体或被关注,相应的模型必须实现一个接口并使用一个特质。

以下是如何为一个 UserCompany 实体实现,其中用户可以关注公司,而公司可以被关注

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Hypefactors\Laravel\Follow\Traits\CanFollow;
use Hypefactors\Laravel\Follow\Contracts\CanFollowContract;

class User extends Model implements CanFollowContract
{
    use CanFollow;
}
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Hypefactors\Laravel\Follow\Traits\CanBeFollowed;
use Hypefactors\Laravel\Follow\Contracts\CanBeFollowedContract;

class Company extends Model implements CanBeFollowedContract
{
    use CanBeFollowed;
}

注意:如果需要,一个实体可以关注其他实体,也可以被其他实体关注,只需在同一模型上实现两个接口和特质即可实现该需求。

关注实体

您可以像这样关注一个实体

$company = Company::find(1);

$user = User::find(1);
$user->follow($company);

您也可以通过即将被关注的实体执行相同的操作

$user = User::find(1);

$company = Company::find(1);
$company->addFollower($user);

关注多个实体

您可以像这样关注多个实体

$companies = Company::whereIn('id', [1, 3, 10])->get();

$user = User::find(1);
$user->followMany($companies);

您也可以通过即将被关注的实体执行相同的操作

$users = User::whereIn('id', [1, 3, 10])->get();

$company = Company::find(1);
$company->addManyFollowers($users);

取消关注实体

您可以像这样取消关注一个实体

$company = Company::find(1);

$user = User::find(1);
$user->unfollow($company);

您也可以通过即将被取消关注的实体执行相同的操作

$user = User::find(1);

$company = Company::find(1);
$company->removeFollower($user);

取消关注多个实体

您可以像这样取消关注多个实体

$companies = Company::whereIn('id', [1, 3, 10])->get();

$user = User::find(1);
$user->unfollowMany($companies);

您也可以通过即将被取消关注的实体执行相同的操作

$users = User::whereIn('id', [1, 3, 10])->get();

$company = Company::find(1);
$company->removeManyFollowers($users);

确定实体是否关注另一个实体

您可以像这样取消关注一个实体

$company = Company::find(1);

$user = User::find(1);
$user->isFollowing($company);

您也可以通过即将被关注的实体执行相同的操作

$user = User::find(1);

$company = Company::find(1);
$company->hasFollower($user);

确定实体是否有关注者

$user = User::find(1);

if ($user->hasFollowings()) {
    echo "User is following {$user->followings->count()} entities.";
}

确定实体是否有粉丝

$company = Company::find(1);

if ($company->hasFollowers()) {
    echo "Company has {$company->followers->count()} followers.";
}

获取关注者列表

获取关注者列表(另一个实体关注的实体)

$user = User::find(1);

$followings = $user->followings

获取粉丝列表

获取粉丝列表(关注该实体的实体)

$company = Company::find(1);

$followers = $company->followers

按实体类型获取关注者列表

获取关注者列表(另一个实体关注的实体)并按实体类型筛选

$user = User::find(1);

$followings = $user->followings()->whereFollowableType(Company::class)->get();

按实体类型获取粉丝列表

获取粉丝列表(关注该实体的实体)并按实体类型筛选

$company = Company::find(1);

$followers = $company->followers()->whereFollowerType(User::class)->get();

贡献

感谢您对 Laravel Follow 的兴趣。以下是一些贡献的方式。

安全

如果您发现任何安全问题,请通过电子邮件 support@hypefactors.com 而不是使用问题跟踪器。

许可证

Laravel Follow 根据 BSD 3-Clause 许可证授权。有关更多信息,请参阅 许可证文件