use*_*719 7 javascript sequelize.js
我想创建一个锦标赛(如果不存在)和一个与锦标赛关联的匹配(如果不存在)。
let [match, created] = await Match.findOrCreate( {
where: {scoreHome: 97, Tournament: {name: "USA South Men's Basketball"}},
include: [Tournament]
})
Run Code Online (Sandbox Code Playgroud)
如果锦标赛“美国南部男子篮球”已经在数据库中(假设 ID 为 1),则应使用 TournamentId: 1 创建比赛。如果数据库中已经有比赛{scoreHome: 97 and TournamentId: 1},则不应创建比赛.
let Match = sequelize.define('Match', {
scoreHome: DataTypes.INTEGER,
//...
})
Match.associate = models => {
Match.belongsTo(models.Tournament)
}
Run Code Online (Sandbox Code Playgroud)
编辑 这是错误:
[错误:无效值 [对象对象]]
这工作正常
let match = await Match.create({
scoreHome: 97, Tournament: {name: "USA South Men's Basketball"}
},{include: [Tournament]}
})
Run Code Online (Sandbox Code Playgroud)
我不确定sequelize是否允许这种“深度findOrCreate”。\n但是您可以使用两个查询和sequelize事务来实现所需的效果,以确保两者链接在一起:
\nconst t = await sequelize.transaction();\n\ntry {\n const [tournament] = await Tournament.findOrCreate({\n where: {name: "USA South Men's Basketball"},\n { transaction: t }\n })\n const [match] = await Match.findOrCreate({\n where: {scoreHome: 97, tournamentId: tournament.id},\n { transaction: t }\n })\n t.commit()\n} catch(err)\xc2\xa0{\n t.rollback()\n}\nRun Code Online (Sandbox Code Playgroud)\n它有点冗长,但这样你就可以确定自己在做什么,而且(个人观点)对于在你之后阅读该内容的其他开发人员来说也更具可读性。
\n| 归档时间: |
|
| 查看次数: |
912 次 |
| 最近记录: |