我使用nodejs工作sequelize,我尝试将我的查询代码从mysql查询转换为sequelize语法你可以帮助我吗?


mysql查询:


 从消息内连接messageToUsers中选择用户名,消息,fromUserId,toUserID messages.id = messageToUsers.messageID在messages.fromUserID = users.id上留下外连接用户,其中messageToUsers .toUserID` = 5,消息.fromUserId` = 7或messageToUsers .toUserID` = 7,消息.fromUserId` = 5



 sequlize query


 Message.hasMany(MessageToUser, {FOREIGNKEY: 'MESSAGEID'});
 Message.belongsTo(用户,{FOREIGNKEY: 'fromUserId'});
 Message.findAll({where:{fromUserId:5,fromUserID:7},
 include:[
 {model:MessageToUser,where:{toUserID:5,toUserID:7}},
 {model:Users,attributes:['id','username']}
]

})。then(function(messages){
 console.log(JSON。 stringify(messages));
 res.status(200).json(messages);


})

&# XA;
答案 0 :(得分:0)
您缺少属性
Message.hasMany(MessageToUser,{foreignKey:'messageID'});
Message.belongsTo(Users,{foreignKey:'fromUserId'});
Message.findAll({where:{fromUserId :5,fromUserID : 7},
include :[
{model:MessageToUser,where:{toUserID:5,toUserID:7}} ,
{model:Users,attributes:['id','username']}
],
attributes: ["username","message", "toUserId", "fromUserId"] //<-HERE
}).then(function(messages) {
console.log(JSON.stringify(messages));
res.status(200).json(messages);
}); //<- you also missed a semicolon here.
我注意到的第二件事。如果您在where
中的同一模型中使用相同的字段两次,则会忽略其中一个字段。您需要使用$and
。
{model:MessageToUser,where:{
$and: {[toUserID:5],
[toUserID:7]}
}}
注意:语句末尾缺少分号通常不会导致应用程序失败,但最佳做法是保持一致,要么总是使用它们,要么总是省略它们。
答案 1 :(得分:0)
我解决了这个问题,谢谢大家
Message.hasMany(MessageToUser,{foreignKey:'messageID',as: 'model1'});
Message.belongsTo(Users,{foreignKey:'fromUserId'});
Message.findAll({where:{$or:[{'$model1.toUserId$':toUserId,fromUserId:fromUserID},{'$model1.toUserId$':fromUserID,fromUserId:toUserId}]},
include :[
{attributes: ["toUserId"],model:MessageToUser,as: 'model1'} ,
{attributes: ["username"],model:Users}
]
}).then(function(messages) {
console.log(JSON.stringify(messages));
res.status(200).json(messages);
});