【问题标题】:Laravel 5.2 Friendship system: Many to Many relationshipLaravel 5.2 友谊系统:多对多关系
【发布时间】: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()方法。

以及如何做到这一点查询生成器。

谢谢!

【问题讨论】:

    标签: php laravel orm eloquent


    【解决方案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() 合并这些关系,查看编辑后的答案。
    猜你喜欢
    • 2014-09-22
    • 1970-01-01
    • 2016-11-03
    • 2013-07-24
    • 2023-04-06
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    相关资源
    最近更新 更多