我想要创建一个锦标赛(如果不存在),和一个匹配(如果不存在)相关联的比赛。
let [match, created] = await Match.findOrCreate( {
where: {scoreHome: 97, Tournament: {name: "USA South Men's Basketball"}},
include: [Tournament]
})如果“美国南方男篮”比赛已经在db中(假设是id 1),那么应该用TournamentId: 1创建比赛。如果数据库中已经有与{scoreHome: 97 and TournamentId: 1}的匹配,则不应该创建匹配。
let Match = sequelize.define('Match', {
scoreHome: DataTypes.INTEGER,
//...
})
Match.associate = models => {
Match.belongsTo(models.Tournament)
}编辑这里是错误:
[错误:无效值对象对象]
这个很好用
let match = await Match.create({
scoreHome: 97, Tournament: {name: "USA South Men's Basketball"}
},{include: [Tournament]}
})发布于 2020-08-20 09:29:57
我不确定续写是否会允许这种“深度findOrCreate”。但是,您可以使用两个查询和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()
}它有点冗长,但这样您就可以确定自己在做什么,而且(个人意见)也更容易被其他开发人员在您之后阅读。
https://stackoverflow.com/questions/45530818
复制相似问题