我的代码:
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-clause条目表”User“”,我不确定这意味着什么。
我尝试过使用
where:{
id: UserMail.from_user_id;
}
但是每次执行查询时它都有“User”。“id”= NULL所以它永远不会返回结果。我也尝试了各种各样的变化,让它不是NULL,但没有我试过的变量。
我只想在查询中添加一个列,来自Users表的用户名,其中UserMail表中的from_user_id位于Users表中。这听起来很简单,但我不能因为我的生活似乎这样做。
只需使用
即可在主键上加入表格include:{[User]}
它将包括User主键等于UserMail主键的位置,但这不是我想要的。我希望它在不是主键的UserMail列上。
答案 0 :(得分:0)
{sourceKey: 'id'}
:UserMail.id将作为外键列的内容添加到User。
所以将sourceKey
更改为您想要的列。
答案 1 :(得分:0)
使用targetKey
代替sourceKey
这是我项目中的代码,希望对您有帮助
Country.hasMany(Region, { foreignKey: 'countrycode' })
Region.belongsTo(Country, { foreignKey: 'countrycode', targetKey:'countrycode' })
所以,我们会
User.hasMany(UserMail, {foreignKey:'from_user_id'})
UserMail.belongsTo(User, {foreignKey: 'from_user_id', targetKey:'id'})