hypefactors / laravel-follow
Laravel 9 Eloquent 模型关注系统。
v9.0.0
2023-07-22 09:44 UTC
Requires
- php: ^8.1
- illuminate/support: ^10.0
Requires (Dev)
- bamarni/composer-bin-plugin: ^1.4
- hypefactors/php-code-standards: ^3.0
- mockery/mockery: ^1.0
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^9.0
README
Laravel 10 Eloquent 模型关注系统。
此包符合 FIG 标准 PSR-1、PSR-2 和 PSR-4,以确保共享 PHP 之间的高度互操作性。如果您发现任何合规性问题,请通过拉取请求发送补丁。
版本矩阵
安装
您可以通过 composer 安装此包
composer require hypefactors/laravel-follow
该包将被自动注册。
现在您需要运行迁移
php artisan migrate
用法
准备 Eloquent 模型
要允许一个实体关注其他实体或被关注,相应的模型必须实现一个接口并使用一个特质。
以下是如何为一个 User
和 Company
实体实现,其中用户可以关注公司,而公司可以被关注
<?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 许可证授权。有关更多信息,请参阅 许可证文件。