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

Laravel 5 如何从用户模型返回接收方和发送方对象,laravel-5,Laravel 5,我正在构建一个应用程序,它有一个用于用户间聊天的部分。当然,我有一个用于users表的用户模型和一个用于消息的聊天模型。在聊天模型中,我与用户模型有一个belongsTo关系,在用户模型中有一个对应的hasmall关系。chats表包含发送者id、接收者id和消息列 型号: class User extends Model { function chat(){ return $this->hasMany(Chat::class); } } class Ch

我正在构建一个应用程序,它有一个用于用户间聊天的部分。当然,我有一个用于users表的用户模型和一个用于消息的聊天模型。在聊天模型中,我与用户模型有一个belongsTo关系,在用户模型中有一个对应的hasmall关系。chats表包含发送者id、接收者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
    */
}
在这之前我都很好。但是,在控制器中,当聊天记录保存在表中时,我尝试使用在聊天模型中创建的关系返回聊天记录的响应,其中包括发送者和接收者对象,但始终只获取发送者对象。我还尝试在聊天模式上使用访问器,如下所示:

公共函数getReceiverAttribute(){
$receiver=User::find($this->receiver_id)->first();
返回$receiver;
}

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


注意:请注意,我是通过手机发送的,因此可能格式不正确。

您可能希望在聊天模式中分离您的关系,如下所示:

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=newchat$聊天->发件人_id=Auth::id()$聊天->接收者id=$request->id$聊天->消息=$request->消息$聊天->保存();然后,我发布的关于分离
发送者
接收者
的答案应该适合你。模型必须了解这些关系