overtrue / laravel-follow
Laravel 用户关注/取消关注系统。
5.2.0
2024-03-13 05:04 UTC
Requires
- laravel/framework: ^9.0|^10.0|^11.0
Requires (Dev)
- brainmaestro/composer-git-hooks: dev-master
- friendsofphp/php-cs-fixer: ^3.8
- laravel/pint: ^1.5
- mockery/mockery: ^1.5
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^10.0
- 5.x-dev
- 5.2.0
- 5.1.1
- 5.1.0
- 5.0.1
- 5.0.0
- 4.x-dev
- 4.1.0
- 4.0.0
- 3.x-dev
- 3.1.1
- 3.1.0
- 3.0.1
- 3.0.0
- 2.x-dev
- 2.4.6
- 2.4.5
- 2.4.4
- 2.4.3
- 2.4.2
- 2.4.1
- 2.4.0
- 2.3.0
- 2.2.1
- 2.2.0
- 2.1.1
- 2.1.0
- 2.0.1
- 2.0.0
- 1.x-dev
- 1.1.16
- 1.1.15
- 1.1.14
- 1.1.13
- 1.1.12
- 1.1.11
- 1.1.10
- 1.1.9
- 1.1.8
- 1.1.7
- 1.1.6
- 1.1.5
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.1
- 1.0
This package is auto-updated.
Last update: 2024-09-13 06:13:53 UTC
README
Laravel 用户关注/取消关注系统。
相关项目
- 喜欢: overtrue/laravel-like
- 收藏: overtrue/laravel-favorite
- 订阅: overtrue/laravel-subscribe
- 投票: overtrue/laravel-vote
安装
composer require overtrue/laravel-follow -vvv
配置和迁移
php artisan vendor:publish --provider="Overtrue\LaravelFollow\FollowServiceProvider"
使用方法
特性
Overtrue\LaravelFollow\Traits\Follower
将 Follower 特性添加到您的用户模型中
use Overtrue\LaravelFollow\Traits\Follower; class User extends Authenticatable { use Follower; <...> }
Overtrue\LaravelFollow\Traits\Followable
然后,将 Followable 特性添加到您的 followable 模型中,例如 App\User
use Overtrue\LaravelFollow\Traits\Followable; class User extends Authenticatable { use Followable; <...> }
或任何其他模型
use Overtrue\LaravelFollow\Traits\Followable; class Channel extends Model { use Followable; <...> }
API
$user1 = User::find(1); $user2 = User::find(2); $user1->follow($user2); $user1->unfollow($user2); $user1->toggleFollow($user2); $user1->acceptFollowRequestFrom($user2); $user1->rejectFollowRequestFrom($user2); $user1->isFollowing($user2); $user2->isFollowedBy($user1); $user2->hasRequestedToFollow($user1);
获取关注者
$user->followings; $user->approvedFollowings; $user->notApprovedFollowings;
foreach($user->followings()->with('followable')->get() as $following) { $following->created_at; // followed at $following->followable->nickname; // the user attributes }
获取粉丝
$user->followers; $user->approvedFollowers; $user->notApprovedFollowers;
foreach($user->followers()->with('followers')->get() as $follower) { $follower->created_at; // followed at $follower->follower->nickname; // the user attributes }
关注请求
如果您希望某些关注请求需要被被关注者接受,只需在具有 Followable 特性的模型中重写 needsToApproveFollowRequests() 方法,并添加您自定义的逻辑即可
public function needsToApproveFollowRequests() { // Your custom logic here return (bool) $this->private; }
聚合
// followings count $user->followings()->count(); $user->approvedFollowings()->count(); $user->notApprovedFollowings()->count(); // with query where $user->followings()->where('gender', 'female')->count(); // followers count $user->followers()->count(); $user->approvedFollowers()->count(); $user->notApprovedFollowers()->count();
使用 *_count
属性列出
$users = User::withCount(['followings', 'followables'])->get(); // or $users = User::withCount(['approvedFollowings', 'approvedFollowers'])->get(); foreach($users as $user) { // $user->followings_count; // $user->followers_count; // or // $user->approved_followings_count; // $user->approved_followers_count; }
将用户关注状态附加到 followable 集合中
您可以使用 Follower::attachFollowStatus(Collection $followables)
来附加用户关注状态,它将为 $followables
中的每个模型设置 has_followed
属性
对于模型
$user1 = User::find(1); $user->attachFollowStatus($user1); // result [ "id" => 1 "name" => "user1" "private" => false "created_at" => "2021-06-07T15:06:47.000000Z" "updated_at" => "2021-06-07T15:06:47.000000Z" "has_followed" => true ]
对于 Collection | Paginator | LengthAwarePaginator | array
$user = auth()->user(); $users = User::oldest('id')->get(); $users = $user->attachFollowStatus($users); $users = $users->toArray(); // result [ [ "id" => 1 "name" => "user1" "private" => false "created_at" => "2021-06-07T15:06:47.000000Z" "updated_at" => "2021-06-07T15:06:47.000000Z" "has_followed" => true ], [ "id" => 2 "name" => "user2" "private" => false "created_at" => "2021-06-07T15:06:47.000000Z" "updated_at" => "2021-06-07T15:06:47.000000Z" "has_followed" => true ], [ "id" => 3 "name" => "user3" "private" => false "created_at" => "2021-06-07T15:06:47.000000Z" "updated_at" => "2021-06-07T15:06:47.000000Z" "has_followed" => false ], [ "id" => 4 "name" => "user4" "private" => false "created_at" => "2021-06-07T15:06:47.000000Z" "updated_at" => "2021-06-07T15:06:47.000000Z" "has_followed" => false ], ]
对于分页
$users = User::paginate(20); $user->attachFollowStatus($users);
按粉丝数量排序
您可以使用以下方法查询按粉丝数量排序的用户
orderByFollowersCountDesc()
orderByFollowersCountAsc()
orderByFollowersCount(string $direction = 'desc')
示例
$users = User::orderByFollowersCountDesc()->get(); $mostPopularUser = User::orderByFollowersCountDesc()->first();
N+1 问题
为了避免 N+1 问题,您可以使用预加载来将此操作减少为仅2个查询。查询时,您可以使用 with
方法指定哪些关系应该被预加载
$users = User::with('followings')->get(); foreach($users as $user) { $user->isFollowing(2); } $users = User::with('followables')->get(); foreach($users as $user) { $user->isFollowedBy(2); }
事件
❤️ 赞助我
如果您喜欢我的项目并想支持它,点击这里 ❤️
项目由 JetBrains 支持
非常感谢 JetBrains 好意提供许可证,使我能够参与此和其他开源项目。
贡献
您可以通过以下三种方式之一进行贡献
代码贡献过程并不非常正式。您只需要确保您遵循 PSR-0、PSR-1 和 PSR-2 编码指南。任何新的代码贡献都必须附有适用时的单元测试。
PHP 扩展包开发
想知道如何从零开始构建 PHP 扩展包?
请关注我的实战课程,我将在该课程中分享一些扩展开发经验 —— 《PHP 扩展包实战教程 - 从入门到发布》
许可证
MIT