laravel-5 - 如何从用户模型返回接收者和发送者对象
问题描述
我正在构建一个应用程序,其中有一个供用户聊天的部分。自然地,我有一个用于 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 对象。我希望我能够清楚地表达问题?如何获取接收者对象?
注意:请我从手机发送此内容,因此可能格式不正确。
解决方案
您可能希望在 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
对象中调用这些关系
推荐阅读
- c# - 当状态码设置为 .net core 2.1 时,授权过滤器继续开启
- symfony - Symfony 上按 ID 列出的两个不同表的列表
- android-workmanager - WorkManager 自定义约束
- angular - 将服务中的布尔值链接到多个组件
- java - How to add tags when saving an object in an Algolia index using the Java API
- async-await - 运行 .sendKeys 后量角器挂起
- ios - 按下 backBarButton(来自 NavigationController)时如何播放声音?(对于斯威夫特)
- r-markdown - 使用 Blogdown 编写和读取 .rds 文件
- java - AnyChart 试图在活动中显示 2 个折线图
- python - Python - 如何在选择更改后使 tkinter 输入框消失