【发布时间】:2018-06-13 16:14:23
【问题描述】:
Sequelize 似乎正在寻找应该是 Receiver.id 的 Receiver.receiver。我有一个消息实体,它由两个类型为用户标题的字段组成,接收者和发送者。
我尝试使用 Sequelize 像这样检索它
Message.hasOne(User,{foreignKey: 'receiver', as: 'Receiver'});
Message.hasOne(User,{foreignKey: 'sender',as: 'Sender'});
User.belongsTo(Message);
Message.findOne({ where : {id:1},
include: [{
model: User,
as: 'Receiver'
},
{
model: User,
as: 'Sender'
}
]
}).then(function (message) {
});
可能是什么问题?
我在使用 findOne 方法的地方添加了代码 sn-p,并将 hasOne 更改为 BelongstoOne。在我的代码中,我得到一个带有消息数据的套接字调用,然后将其存储在数据库中,然后在 promise 中检索消息并将其发送到作为接收者的套接字。 (注意:每条消息由两个用户组成,他们要么是发送者,要么是接收者,并且有很多消息可以在同一个发送者和接收者之间)。
socket.on('send message', (data) => {
//todo connect to the gambeat db and update the users info to online
Message.create({
time: moment.utc().format(),
isread: false,
message: data.message,
messagestatus: 'DELIVERED',
receiver: data.receiver.id,
sender: data.sender.id,
}).then(function(message) {
Message.belongsTo(User,{foreignKey: 'receiver', as: 'Receiver'});
Message.belongsTo(User,{foreignKey: 'sender',as: 'Sender'});
Message.findOne({ where :
{id: message.id},
include: [{
model :User,
as: 'Receiver'},
{
model :User,
as: 'Sender'
}
]
}).then(function (message) {
var soc = users_socket.find(soc => Number(soc.uniqueId) === Number(data.receiver.id));
soc.emit('disperse message', message);
});
}).catch(function(err) {
console.log(err, err);
});
});
【问题讨论】:
标签: sequelize.js