Laravel 5.4:如何在单表中实现粉丝与关注用户的获取功能
解决Laravel 5.4中获取用户关注列表的问题
别着急,我来帮你搞定这个问题!用户关注功能本质是多对多关联——一个用户可以关注多个用户,同时也能被多个用户关注。你已经有了followers中间表,并且能正常获取粉丝,只要把关联关系反过来定义,就能轻松拿到用户的关注列表啦。
第一步:确认followers表的结构
首先得确保你的followers中间表字段是合理的,通常应该包含:
follower_id:发起关注的用户ID(也就是当前用户的ID)followed_id:被关注的用户ID- 可选的
created_at/updated_at时间戳字段
假设你之前获取粉丝的followers()方法是这样的(粉丝指的是关注当前用户的人):
public function followers() { // 参数顺序:关联模型、中间表名、当前模型在中间表的外键、关联模型在中间表的外键 return $this->belongsToMany(User::class, 'followers', 'followed_id', 'follower_id'); }
第二步:定义following()关联方法
要获取当前用户关注的人,只需要调换外键的顺序即可。在User模型中添加以下方法:
/** * 获取当前用户关注的所有用户 */ public function following() { return $this->belongsToMany(User::class, 'followers', 'follower_id', 'followed_id'); }
这里的逻辑很简单:当前用户是follower_id对应的用户,我们要关联到followed_id对应的所有用户,也就是他主动关注的人。
第三步:使用方法获取关注列表
现在你就可以通过以下方式轻松获取关注列表了:
// 获取当前登录用户的关注列表 $currentUser = auth()->user(); $followingUsers = $currentUser->following; // 直接返回用户集合 // 也可以添加条件查询,比如只获取已验证的关注用户 $verifiedFollowing = $currentUser->following()->where('email_verified_at', '!=', null)->get();
常见问题排查
如果还是没成功,可能是这几个坑:
- 外键顺序搞反:这是最容易犯的错误,一定要记住
belongsToMany的后两个参数顺序——先写当前模型在中间表的外键,再写关联模型的外键。 - 中间表名不匹配:确保你传入的中间表名和数据库里的实际表名完全一致(比如你的表如果叫
user_follows,就不能写followers)。 - 方法名或语法错误:检查
following()方法是否在User模型中正确定义,有没有拼写错误或者语法问题。
如果你的followers表字段命名不一样(比如用user_id和following_id),只需要对应调整外键参数就行,示例如下:
public function following() { return $this->belongsToMany(User::class, 'followers', 'user_id', 'following_id'); }
内容的提问来源于stack exchange,提问作者Agil
相关产品推荐
相关产品推荐

