对非主键上的连接表进行序列化

sqserrrh  于 2022-10-03  发布在  其他
关注(0)|答案(3)|浏览(173)

我的代码是:

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

    })
}

当我使用它时,我得到“Unhanded Rejection SequelizeDatabaseError:Missing From-子句条目for table”User“,我不确定这是什么意思。

我试过用

where:{
    id: UserMail.from_user_id;
}

但每次执行查询时,它都有“user”.“id”=NULL,因此它永远不会返回结果。我还尝试了各种变体,以使其不为空,但我尝试过的变量都不起作用。

我只想在查询中添加一个列,即USERS表中的USERNAME列,其中UserMail表中的from_user_id位于USERS表中。这听起来很简单,但我似乎无论如何也做不到。

只需使用以下命令即可在主键上连接表

include:{[User]}

它将包括用户主键与UserMail主键相等的位置,但这不是我想要的。我希望它位于不是主键的UserMail列上。

6yjfywim

6yjfywim1#

使用targetKey而不是sourceKey

这是我的项目中的代码,希望这对我有帮助

Country.hasMany(Region, { foreignKey: 'countrycode' })
Region.belongsTo(Country, { foreignKey: 'countrycode', targetKey:'countrycode' })

所以,URS将会是

User.hasMany(UserMail, {foreignKey:'from_user_id'})
UserMail.belongsTo(User, {foreignKey: 'from_user_id', targetKey:'id'})
wdebmtf2

wdebmtf22#

收集“Target Key”和“SourceKey”对我来说很管用,如下所示:

TableB.belongsTo(models.TableA, { foreignKey: 'someID', targetKey: 'notTableAID' } );

TableA.hasOne(TableB, {
  sourceKey: 'NonPrimaryKeyColumnOnTheSourceModel',
  foreignKey: 'matchingColumnOnTheTargetModel'
});
xhv8bpkk

xhv8bpkk3#

{sourceKey: 'id'}:UserMail.id将作为外键列的内容添加到User中。

因此,将sourceKey更改为您想要的列。

相关问题