hasMany ForeignKey 在 Sequelize 中不起作用

问题描述

我有一些模型 - kanban_cards、kanban_checklists、kanban_checkitems。

kanban_cards 模型:

export default (sequelize,DataTypes) => {
  return sequelize.define('kanban_card',{
    id: {
      type: DataTypes.UUID,defaultValue: DataTypes.UUIDV4,primaryKey: true,},name: {
      type: DataTypes.STRING,allowNull: false
    },label: {
      type: DataTypes.STRING,allowNull: true,listId: {
      type: DataTypes.UUID,...
  })
}

kanban_checklist:

export default (sequelize,DataTypes) => {
  return sequelize.define('kanban_checklist',cardId: {
      type: DataTypes.UUID,allowNull: false,}
  })
}

而关联是:

const models = {
  KanbanCards: KanbanCards(sequelize,Sequelize.DataTypes),KanbanChecklists: KanbanChecklists(sequelize,...
}
...
models.KanbanCards.hasMany(models.KanbanChecklists,{ as: 'checklists',foreignKey: 'cardId' })
models.KanbanChecklists.belongsTo(models.KanbanCards)

如果我使用 findAll,它工作正常,但如果我尝试创建,它不起作用。

它说。 关系“kanban_checklists”的“kanbanCardId”列不存在

我将使用 cardId 而不是 kanbanCardId

我尝试设置对 cardId 的引用,但也没有用。

解决方法

如果您在 hasMany 中指定了显式外键列,您应该对另一部分执行相同的操作 - belongsTo

models.KanbanChecklists.belongsTo(models.KanbanCards,{ foreignKey: 'cardId' })

否则 Sequelize 本身会生成一个外键名称,就像您的情况一样 kanbanCard+id:

连接表中的外键名称(代表目标模型)或代表其他列的类型定义的对象(语法参见 Sequelize.define)。使用对象时,可以添加 name 属性来设置列的名称。默认为目标名称+目标主键