Laravel 5.2 友谊系统:多对多关系
Posted
技术标签:
【中文标题】Laravel 5.2 友谊系统:多对多关系【英文标题】:Laravel 5.2 Friendship system: Many to Many relationship 【发布时间】:2016-09-27 23:15:37 【问题描述】:表朋友:id、user_id、friend_id。
表 user_profiles:id、user_id、first_name...
如何通过 Eloquent ORM 获取用户好友列表?
user_id: 5 |朋友ID:6
user_id: 6 |朋友 ID 5
类似问题:
Friendship system with Laravel : Many to Many relationship
Laravel & Eloquent - Query 'Friends' Relationship
我不明白是谁调用了getFriendsAttribute()方法。
以及如何做到这一点查询生成器。
谢谢!
【问题讨论】:
【参考方案1】:您可以在User
模型上定义关系:
class User extend Model
...
// Get list of who sent me a friend request
public function myFriends()
return $this->belongsToMany(get_class($this), 'friends', 'friend_id');
// Get the list of friends whom I invited
public function friendsOf()
return $this->belongsToMany(get_class($this), 'friends', 'user_id', 'friend_id');
// Merge
public function getFriendsAttribute()
return $this->myFriends->merge($this->friendOf);
然后你可以通过$user->myFriends
获取用户的好友列表,通过他们的名字查询好友:$user->myFriends()->where('first_name', '=', 'John')->get()
。
【讨论】:
我有关系。但我可以得到一个只有 user_id 或 user_friend 的列表。如何合并请求? 我没有收到您关于“但我只能获得 user_id 或 user_friend 的列表。如何合并请求?”的问题你能更清楚你想达到什么目标吗? 你的意思是通过某个user_id
获取好友列表吗?
如果我这样写:return $this->belongsToMany(get_class($this), 'users_friends', 'friend_id');我收到了向我发送好友请求/邀请的人 如果我这样写: return $this->belongsToMany(get_class($this), 'users_friends', 'user_id', 'friend_id');我得到了我邀请的朋友名单。但我在他们的朋友列表中不可见。
@Anton 如果你想同时显示邀请你的朋友和你被邀请的朋友,那么你可以使用merge()
合并这些关系,查看编辑后的答案。以上是关于Laravel 5.2 友谊系统:多对多关系的主要内容,如果未能解决你的问题,请参考以下文章