2017-10-12 14 views
0

私はnodejsで続行しています。私のクエリコードをmysqlクエリから次の構文に変換してみてください。mysqlクライアントからクエリの構文を後継に変換する

mysqlのクエリ:

select username,message,fromUserId,toUserID from messages inner join messageToUsers on messages.id = messageToUsers.messageID left outer join users on messages.fromUserID = users.id where messageToUsers.`toUserID` = 5 and messages.`fromUserId` = 7 or messageToUsers.`toUserID` = 7 and messages.`fromUserId` = 5 

sequlizeクエリ

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']} 
     ] 

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


    }) 

答えて

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の同じモデルで同じフィールドを2回使用すると、その1つは無視されます。 $andを使用する必要があります。

{model:MessageToUser,where:{ 
    $and: {[toUserID:5], 
      [toUserID:7]} 
}} 

注:ステートメントの末尾に不足しているセミコロンは通常、アプリケーションは失敗したが一貫していることがベストプラクティスです、どちらか常にそれらを使用するか、常にそれらを省略することはありません。

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


    }); 
関連する問題