微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

hasMany ForeignKey 在 Sequelize 中不起作用

如何解决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 属性来设置列的名称。默认为目标名称+目标主键

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。