序列化多个外键
Sequelize multiple foreignKey
我有表“交易”和“用户”
所以用户可以进行多次交易。
用户可以是买家或卖家。
我正在尝试像这样在 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'
})
}
当我在“用户”Table 中通过 customId 执行 findOne 并包含数据库“Trades”时,我想在用户是交易员和卖家时获得所有信息,但只有当用户是卖家时它才会给我.
let user = await UserData.findOne({where:{
customId: req.user.customId
}, include: 'Trades'
});
您必须为每个关系使用别名。
这是 link :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:在文档中,他们不会将数组传递给 include,但在我使用 typescript 的版本中,必须这样做。所以我让你管理那一点!
我有表“交易”和“用户” 所以用户可以进行多次交易。
用户可以是买家或卖家。
我正在尝试像这样在 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'
})
}
当我在“用户”Table 中通过 customId 执行 findOne 并包含数据库“Trades”时,我想在用户是交易员和卖家时获得所有信息,但只有当用户是卖家时它才会给我.
let user = await UserData.findOne({where:{
customId: req.user.customId
}, include: 'Trades'
});
您必须为每个关系使用别名。 这是 link :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:在文档中,他们不会将数组传递给 include,但在我使用 typescript 的版本中,必须这样做。所以我让你管理那一点!