如何从用户模型返回接收方和发送方对象

时间:2018-12-09 10:44:02

标签: laravel-5

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

模型:

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; }

然后将其附加到返回的聊天中。 但是我一直在寻找发送者对象。我希望我能清楚地表达问题吗? 如何获得接收器对象?

注意:我是从手机发送过来的,所以可能格式不正确。

1 个答案:

答案 0 :(得分:1)

您可能想像下面这样在聊天模型中分离关系:

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对象中调用这些关系