首页 > 解决方案 > 如何从用户模型返回接收者和发送者对象

问题描述

我正在构建一个应用程序,其中有一个供用户聊天的部分。自然地,我有一个用于 users 表的 User 模型和一个用于消息的 Chat 模型。在 Chat 模型中,我与 User 模型有一个 belongsTo 关系,在 User 模型中有一个对应的 hasMany 关系。聊天表有 sender_id、receiver_id 和 message 列。

楷模 :

class User extends Model {
    function chat(){
        return $this->hasMany(Chat::class);
    }
}

class Chat extends Model {
    function user(){
        return $this->belongsTo(User::class);
    }

    /*** columns ***/
    /* sender_id
    * receiver_id
    * message
    */
}

到这里为止我都很好。但是,在控制器中,当聊天保存在表中时,我试图使用我在聊天模型中创建的关系返回聊天的响应,包括发送者和接收者对象,但只获取发送者对象。我还尝试在聊天模型上使用访问器,如下所示:

public function getReceiverAttribute(){ $receiver = User::find($this->receiver_id)->first(); return $receiver; }

然后将此附加到返回的聊天中。然而,我一直在收到 sender 对象。我希望我能够清楚地表达问题?如何获取接收者对象?

注意:请我从手机发送此内容,因此可能格式不正确。

标签: laravel-5

解决方案


您可能希望在 Chat 模型中分离您的关系,如下所示:

class Chat extends Model {
    /*function user(){
        return $this->belongsTo(User::class);
    }*/

    function sender(){
        //tell the relationship which column they are related on on that table
        return $this->belongsTo(User::class, 'sender_id'); 
    }

    function receiver(){
        //same applies here
        return $this->belongsTo(User::class, 'receiver_id'); 
    }
}

用户模型也是如此

class User extends Model {
    /*function chat(){
        return $this->hasMany(Chat::class);
    }*/

    function senderChat(){
        return $this->hasMany(Chat::class, 'sender_id'); //specify in both models just in case
    }

    function receiverChat(){
        return $this->hasMany(Chat::class, 'receiver_id');
    }
}

我相信这对你有用,你只需从Chat对象中调用这些关系


推荐阅读