Sequelize似乎在寻找应该是Receiver.id的Receiver.receiver。我有一个Message实体,它由两个类型为User,receiver和sender的字段组成。
我尝试使用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方法的用法代码片段,并将hasOne更改为BelongstoOne。在我的代码中,我得到一个带有消息数据的套接字调用,然后将其存储在数据库中,然后在promise中检索Message并将其发送到作为接收者的套接字。 (注意:每条消息由两个用户组成,他们是发送者或接收者,并且有很多消息可以在同一个发送者和接收者之间)。
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);
});
});
答案 0 :(得分:0)
更改
Message.hasOne(User,{foreignKey: 'receiver', as: 'Receiver'});
Message.hasOne(User,{foreignKey: 'sender',as: 'Sender'});
收件人:
Message.belongsTo(User,{foreignKey: 'receiver', as: 'Receiver'});
Message.belongsTo(User,{foreignKey: 'sender',as: 'Sender'});
原因:
HasOne
和BelongsTo
将关联键插入其中 彼此的模型。 HasOne在目标中插入关联键 模型,而BelongsTo在源中插入关联键 模型。