簡體   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