将查询从mysql客户端转换为sequelize语法

时间:2017-10-12 16:14:03

标签: mysql sequelize.js

我使用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;

2 个答案:

答案 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);


    });