我想创建锦标赛(如果不存在),以及与锦标赛相关联的匹配(如果不存在)。
let [match, created] = await Match.findOrCreate( {
where: {scoreHome: 97, Tournament: {name: "USA South Men's Basketball"}},
include: [Tournament]
})
如果锦标赛美国南方男子篮球赛#39;已经在数据库中(让我们说id为1),然后应该使用TournamentId创建匹配:1。如果数据库中已经有{scoreHome: 97 and TournamentId: 1}
匹配,则不应创建匹配项
let Match = sequelize.define('Match', {
scoreHome: DataTypes.INTEGER,
//...
})
Match.associate = models => {
Match.belongsTo(models.Tournament)
}
修改 这是错误:
[错误:无效的值[object Object]]
这很好用
let match = await Match.create({
scoreHome: 97, Tournament: {name: "USA South Men's Basketball"}
},{include: [Tournament]}
})
答案 0 :(得分:0)
我不确定续集是否会允许此“深度findOrCreate”。 但是您可以使用两个查询和序列事务来确保两个链接在一起,从而达到所需的效果:
const t = await sequelize.transaction();
try {
const [tournament] = await Tournament.findOrCreate({
where: {name: "USA South Men's Basketball"},
{ transaction: t }
})
const [match] = await Match.findOrCreate({
where: {scoreHome: 97, tournamentId: tournament.id},
{ transaction: t }
})
t.commit()
} catch(err) {
t.rollback()
}
这有点冗长,但是您可以确定自己的工作,并且(个人观点)对于另一个在您之后阅读该文档的开发人员来说,也更具可读性。