gpt4 book ai didi

javascript - 序列化多个外键

转载 作者:行者123 更新时间:2023-12-03 22:29:50 24 4
gpt4 key购买 nike

我有“交易”和“用户”表
所以用户可以有多个交易。
用户可以是买方或卖方。
我试图在这样的 Sequelize 中定义它
在交易中

Trades.associate = models => {

Trades.belongsTo(models.UserData, {
targetKey: 'customId',
as: 'buyer',
foreignKey: 'buyerId'
})
Trades.belongsTo(models.UserData, {
targetKey: 'customId',
as: 'seller',
foreignKey: 'sellerId'
})
}
并在用户
UserData.associate = models => {

UserData.hasMany(models.Trades, {
foreignKey: 'buyerId',
sourceKey: 'customId'
})
UserData.hasMany(models.Trades, {
foreignKey: 'sellerId',
sourceKey: 'customId'
})
}
当我在“用户”表中通过 customId findOne 并包含数据库“交易”时,我希望在用户是交易者和卖家时获得所有信息,但仅当用户是卖家时才给我。
        let user = await UserData.findOne({where:{
customId: req.user.customId
}, include: 'Trades'
});

最佳答案

您必须为每个关系使用别名。
这是链接:https://sequelize.org/master/manual/assocs.html#defining-an-alias
但简单地说,您必须执行以下操作:

UserData.hasMany(models.Trades, {
foreignKey: 'buyerId',
sourceKey: 'customId',
as: 'Buyer'
})
UserData.hasMany(models.Trades, {
foreignKey: 'sellerId',
sourceKey: 'customId',
as: 'Seller'
})
然后,当您包括:
let user = await UserData.findOne({where:{
customId: req.user.customId
}, include: ['Seller', 'Buyer']
});
您还可以要求 Sequelize 根据关联而不是模型来执行包含:
include: [
{ association: Trades.associations.Seller }
]
PS:在文档中,他们没有将数组传递给包含,但在我使用 typescript 的版本中,必须这样做。所以我让你管理这一点!

关于javascript - 序列化多个外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67990435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com