gpt4 book ai didi

javascript - 如何为 Sequelize 模型设置外键?

转载 作者:行者123 更新时间:2023-11-30 13:49:54 24 4
gpt4 key购买 nike

这是非常基本的,应该可以工作..但没有。首先是我的模型:

const Conversation = sequelize.define('Conversation', {
name: {
type: DataTypes.STRING,
allowNull: false
},
...
})
Conversation.associate = (models, options) => {
Conversation.hasOne(models.Audio, options)
}

和:

module.exports = (sequelize /*: sequelize */ , DataTypes /*: DataTypes */ ) => {
const Audio = sequelize.define("Audio", {
name: {
type: DataTypes.STRING,
unique: true,
allowNull: true
},
})

Audio.associate = (models, options) => {
Audio.belongsTo(models.Conversation, options)
}

我有一个模型加载器可以:

    fs.readdirSync(`${__dirname}`)
.filter((modelFile) => {
return path.extname(modelFile) === '.js' && modelFile !== 'index.js'
})
.map((modelFile) => {
let model = sequelize.import(`./${modelFile}`)
models[model.name] = model

return model
})
.filter((model) => models[model.name].associate)
.forEach((model) => {
models[model.name].associate(models, {
hooks: true,
onDelete: 'CASCADE'
});
})

因此它会为所有定义了它的模型调用associate 方法。这是可行的,因为当我 .sync 它时,它会在我的 Conversations 表中创建一个 ConversationId 字段。

当我尝试执行时:

            let updAudio = {
ConversationId,
name: 'myname'
}
await global.db.models.Audio.create(updAudio, { logging: console.log })

ConversationId 不是空的,但是当它保存在数据库中时,它是空的。我已经检查了一百遍了。原始查询如下所示:

INSERT INTO "Audios" ("id","name","createdAt","updatedAt") VALUES (DEFAULT,'myname','2019-10-20 19:59:18.139 +00:00','2019-10-20 19:59:18.139 +00:00') RETURNING *;

ConversationId 发生了什么?

最佳答案

您可能需要在模型定义中添加外键:

(两者之一可能有效)

 const Audio = sequelize.define("Audio", {
name: {
type: DataTypes.STRING,
unique: true,
allowNull: true
},
conversationId : {
type: Sequelize.INTEGER,
references: 'Conversations' // or "conversations"? This is a table name
referencesKey: 'id' // the PK column name
}
})

 const Audio = sequelize.define("Audio", {
name: {
type: DataTypes.STRING,
unique: true,
allowNull: true
},
conversationId : {
type: Sequelize.INTEGER,
references: {
model: Conversation
key: 'id'
}
}
})

您可能还需要以这种方式定义您的 belongsTo 关联:

Audio.belongsTo(Conversation, foreignKey: 'conversationId');

尝试查找有关创建表的生成的原始查询,然后从那里开始。

关于javascript - 如何为 Sequelize 模型设置外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58476839/

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