我正在构建一个应用程序,其中包含供用户聊天的部分。自然,我有一个用于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;
}
然后将其附加到返回的聊天中。 但是我一直在寻找发送者对象。我希望我能清楚地表达问题吗? 如何获得接收器对象?
注意:我是从手机发送过来的,所以可能格式不正确。
答案 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
对象中调用这些关系