私のコードのテーブルを結合:Sequelizeは、非プライマリキー
私は私が得ることを使用User.hasMany(UserMail, {foreignKey:'to_user_id', sourceKey:'id'});
User.hasMany(UserMail, {foreignKey:'from_user_id', sourceKey:'id'});
UserMail.belongsTo(User, {foreignKey: 'from_user_id'})
UserMail.belongsTo(User, {foreignKey: 'to_user_id'})
function getUserMail(req,res){
// Authenticate
jwt.verify(req.headers.jwt, process.env.JWT_KEY,function(err,decoded) {
if (err) {
return res.status(401).send("Invalid token");
}
let id = decoded.id;
return UserMail.findAll({
where: {
to_user_id: id,
to_user_deleted: false
},
include:{
model: User,
//This is where the error is
on:{
id: Sequelize.where(Sequelize.col("User.id"), "=",Sequelize.col("UserMail.from_user_id"))
},
attributes:['username']
},
// attributes:[], // TODO Set what columns are needed
order:[['id', 'DESC']]
}).then(mail=> {
return res.status(200).send(mail);
})
})
}
:「ユーザー 『未処理の拒絶SequelizeDatabaseErrorをテーブルのFROM句エントリを行方不明』」と私はどのようなものかわかりません手段。
私が使用して試した
where:{
id: UserMail.from_user_id;
}
しかし、それは結果を返すことはありませんので、クエリが実行されるたびに、それは「ユーザー」。「ID」= NULLを持っています。私はまた、NULLにならないようにするためにあらゆる種類のバリエーションを試しましたが、私が試した変数はありません。
UserMailテーブルのfrom_user_idがUsersテーブルにあるUsersテーブルのusernameというクエリに1つの列を追加するだけです。それはとてもシンプルに聞こえるが、私の人生はそれをするように見えることはできない。
それはちょうど
include:{[User]}
を使用してユーザーのプライマリキーはUserMail主キーに等しいことが含まれることにより、主キーのテーブルを結合するために簡単ですが、それは私が欲しいものではありません。プライマリキーではないUserMailカラムにその値を設定します。