掌握laravel-friendships:3步实现用户间的好友关系管理
【免费下载链接】laravel-friendshipsThis package gives Eloquent models the ability to manage their friendships.项目地址: https://gitcode.com/gh_mirrors/la/laravel-friendships
laravel-friendships 是一款专为 Laravel 设计的好友关系管理扩展包,它让任意 Eloquent 模型都能像 Facebook 那样发起好友申请、接受或拒绝请求、拉黑用户、按分组管理好友关系。无论你正在开发社交产品、社区平台还是内部协作工具,掌握 laravel-friendships 都能在 3 个步骤内搭建出完整的好友系统,无需手写一张关系表的查询逻辑。
第 1 步:一分钟完成安装与环境搭建
laravel-friendships 通过 Composer 一行命令即可引入,安装过程极其简单:
composer require hootlex/laravel-friendships随后发布配置文件和数据表迁移文件,并执行迁移:
php artisan vendor:publish --provider="Hootlex\Friendships\FriendshipsServiceProvider" php artisan migrate✅ 安装完成后,包会自动注册 src/FriendshipsServiceProvider.php 服务提供者,创建两张核心数据表:
| 数据表 | 作用 | 迁移文件 |
|---|---|---|
friendships | 记录双方关系及状态(待确认/已接受/已拒绝/已拉黑) | src/database/migrations/create_friendships_table.php |
user_friendship_groups | 记录好友所属分组(如密友、家人) | src/database/migrations/create_friendships_groups_table.php |
💡 表名可在 src/config/friendships.php 中按需修改。
第 2 步:给模型启用好友能力(仅 1 行代码)
laravel-friendships 的核心是一个 Trait。只需在你的User模型(或任何 Eloquent 模型)中引入Friendable,模型就立即"长出了"管理好友关系的全部方法:
use Hootlex\Friendships\Traits\Friendable; class User extends Model { use Friendable; }这个特性来自 src/Traits/Friendable.php,共封装了 30 余个开箱即用的方法。所有关系状态由 src/Status.php 统一管理,对应 4 种状态:
| 状态 | 常量 | 含义 |
|---|---|---|
| 0 | PENDING | 好友申请待确认 |
| 1 | ACCEPTED | 已成为好友 |
| 2 | DENIED | 申请被拒绝 |
| 3 | BLOCKED | 已被拉黑 |
第 3 步:用几个方法驾驭全部好友场景
发起、接受与拒绝好友申请
这是好友系统最高频的三个动作,一行代码即可完成:
$user->befriend($recipient); // 发送好友申请 $user->acceptFriendRequest($sender); // 接受申请 $user->denyFriendRequest($sender); // 拒绝申请 $user->unfriend($friend); // 解除好友关系拉黑与解除拉黑
$user->blockFriend($friend); // 拉黑 $user->unblockFriend($friend); // 解除拉黑 $user->hasBlocked($friend); // 判断是否已拉黑对方查询关系与好友列表
需要展示"共同好友""好友的好友"时,这些方法能省去大量关联查询:
$user->isFriendWith($friend); // 是否为好友 $user->getFriendRequests(); // 收到的待处理申请 $user->getFriends($perPage = 20); // 好友列表(可分页) $user->getMutualFriends($otherUser); // 与某人的共同好友 $user->getFriendsOfFriends(); // 好友的好友 $user->getFriendsCount(); // 好友总数好友分组管理
在 src/config/friendships.php 中定义分组(包内置了 3 个默认分组),即可给好友打上标签:
'groups' => [ 'acquaintances' => 0, // 熟人 'close_friends' => 1, // 密友 'family' => 2, // 家人 ]$user->groupFriend($friend, 'family'); // 把好友加入"家人"分组 $user->ungroupFriend($friend); // 从所有分组中移除🔍 更多用法可参考项目自带的测试用例:tests/FriendshipsTest.php、tests/FriendshipsGroupsTest.php。
监听好友事件做业务扩展
每个关键动作都会触发事件,方便你做通知推送、数据统计等二次开发:
| 事件 | 触发时机 |
|---|---|
friendships.sent | 好友申请发出 |
friendships.accepted | 申请被接受 |
friendships.denied | 申请被拒绝 |
friendships.blocked/friendships.unblocked | 拉黑 / 解除拉黑 |
friendships.cancelled | 好友关系解除 |
常见问题
Q:只支持 User 模型吗?A:不是。任何 Eloquent 模型引入Friendable后都能参与好友关系,数据表使用多态字段,天然支持跨模型关联。
Q:会发重复的好友申请吗?A:不会。befriend()内部会先校验关系状态,已存在有效关系或已拉黑时不会再发。
Q:如何获取好友关系模型的详细信息?A:调用$user->getFriendship($friend)即可拿到关系模型(定义于 src/Models/Friendship.php),其中包含发送方、接收方与状态。
写在最后
回顾一下完整的 3 步流程:🚀安装扩展 → 启用 Trait → 调用方法。laravel-friendships 用不到 30 行业务代码,就覆盖了好友申请、拉黑、分组、共同好友查询等社交场景的核心能力,是 Laravel 开发者构建好友关系管理功能的最短路径。
【免费下载链接】laravel-friendshipsThis package gives Eloquent models the ability to manage their friendships.项目地址: https://gitcode.com/gh_mirrors/la/laravel-friendships
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考