如何为Sequelize模型设置外键?

问题描述 投票:0回答:1

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

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可以在ConversationId表中创建Conversations字段。

当我尝试执行时:

            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 Conversation = sequelize.define('Conversation',{名称:{类型:DataTypes.STRING,...

javascript node.js postgresql sequelize.js
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.