postgresql - 如何在 sequalize 中将相同的表数据与 where 子句一起包含两次?
问题描述
想要从特定用户的聊天表中获取聊天详细信息以及发件人和收件人详细信息(两者都是此应用程序的用户,因此用户详细信息存储在用户表中)我已经尝试过这个查询
聊天表有
recipientId
,senderId
message
,created_at
&updated_at
。
id
// 只是用户 id,他可以是发送者或接收者
const result = await models.chat.findAll({
where: {
$or: [{
senderId: {
$eq: id
}
}, {
recipientId: {
$eq: id
}
}]
}, include :[{
model:models.User,
as:'User'
}]
})
通过上面的查询,我只得到了收件人用户的详细信息,但我想同时获取两个用户的详细信息。
解决方案
在这里,您可以通过使用关联定义 diff 别名来做到这一点:
chat.belongsTo(User, {as: 'sender', foreignKey : 'senderId'});
chat.belongsTo(User, {as: 'recipient', foreignKey : 'recipientId'});
await models.chat.findAll({
where: {
$or: [{
senderId: { $eq: id }
},{
recipientId: { $eq: id }
}]
},
include :[
{ model:models.User , as:'sender' },
{ model:models.User , as:'recipient' }
]
})
推荐阅读
- python - 你能创建一个 Arduino 按钮,让你在 python 程序中执行某些事情吗?
- ruby-on-rails - 用于 has_many_through 关系的 Rails 模型 where 子句
- sas - 如何在 SortedBy 字段中显示来自 PROC CONTENTS 的排序方法?
- javascript - Brain.js 的石头、纸、剪刀
- php - 如何远程连接 Laravel 项目 mysql 数据库
- bull.js - 服务器 1 如何可靠地知道服务器 2 何时完成了特定工作?(公牛.js)
- matlab - 如何在 Matlab 中解决耦合系统的初始条件
- sql-server - 在 SQL Server 中插入表时跳过一些标识值
- ios - 在 viewDidLoad() 之前闪烁初始 Storyboard 内容?
- mongodb - 使用匹配过滤查找结果?MongoDB