繁体   English   中英

对同一个表进行续集关联

[英]Sequelize assocation to same table

我有一个名为documents的表,其中有一个名为parentId的列,它是对另一个document记录的引用。

使用我当前的代码,我收到错误

insert or update on table "documents" violates foreign key constraint "documents_parentId_fkey"

文件迁移

'use strict'
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('documents', {
      id: {
        allowNull: false,
        primaryKey: true,
        type: Sequelize.UUID,
        defaultValue: Sequelize.UUIDV4
      },
      parentId: {
        allowNull: true,
        type: Sequelize.UUID,
        references: {
          model: 'documents',
          key: 'id'
        }
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      lastUpdatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      lastUpdatedBy: {
        allowNull: false,
        type: Sequelize.UUID
      }
    })
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('documents')
  }
}

文件模型

'use strict'

module.exports = (sequelize, DataTypes) => {
  const document = sequelize.define('document', {
    id: {
      allowNull: false,
      primaryKey: true,
      type: DataTypes.UUID,
      defaultValue: DataTypes.UUIDV4
    },
    parentId: {
      allowNull: true,
      type: DataTypes.UUID,
      references: {
        model: 'documents',
        key: 'id'
      }
    },
    lastUpdatedBy: {
      allowNull: false,
      type: DataTypes.UUID
    }
  },
  {
    updatedAt: 'lastUpdatedAt'
  })
  document.associate = function (models) {
    document.belongsTo(models.document, { foreignKey: 'parentId' })
  }
  return document
}

你如何正确地对同一张桌子做关联?

我有一个配置了constraints: false的自引用表constraints: false设置。

MyModel.belongsTo(MyModel, {
  as: 'parentMyModel',
  foreignKey: 'parentId',
  constraints: false,
});

看起来约束是有效的(并且是一个好的约束)。 我提交的有效负载有一个父uuid,它实际上没有引用任何带有该id的文档。

所以我的代码是对的,我提交的数据是错误的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM