gpt4 book ai didi

javascript - findOrCreate 包含 - sequelize.js

转载 作者:行者123 更新时间:2023-12-01 15:11:20 29 4
gpt4 key购买 nike

我想创建一个锦标赛(如果不存在)和一个与锦标赛关联的匹配(如果不存在)。

let [match, created] = await Match.findOrCreate( {
where: {scoreHome: 97, Tournament: {name: "USA South Men's Basketball"}},
include: [Tournament]
})

如果比赛 'USA South Men's Basketball' 已经在数据库中(假设 id 为 1),那么应该使用 TournamentId: 1 创建比赛。如果数据库中已经有 {scoreHome: 97 and TournamentId: 1} 的比赛,则不应创建匹配项。
  let Match = sequelize.define('Match', {
scoreHome: DataTypes.INTEGER,
//...
})

Match.associate = models => {
Match.belongsTo(models.Tournament)
}

编辑
这是错误:

[Error: Invalid value [object Object]]



这工作正常
let match = await Match.create({
scoreHome: 97, Tournament: {name: "USA South Men's Basketball"}
},{include: [Tournament]}
})

最佳答案

我不确定 sequelize 是否允许这种“深度查找或创建”。
但是您可以使用两个查询来实现想要的效果,并使用 sequelize 事务确保两者链接在一起:

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()
}
它有点冗长,但这样你就可以确定你在做什么,并且(个人意见)对于在你之后阅读的另一个开发人员来说更具可读性。

关于javascript - findOrCreate 包含 - sequelize.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45530818/

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