2
votes

Sequelize Migrations: Ajout d'une contrainte de clé étrangère à une colonne sur la même table

J'essaie donc de créer une table avec des contraintes de clé étrangère dans le fichier de migrations.

J'ai essayé ce que je pouvais en suivant sequelize docs et en bas se trouve le code que j'ai essayé, et j'ai également essayé de déplacer le les références de clé étrangère jusqu'à l'endroit où les attributs ont été définis, mais cela ne fonctionne pas là aussi. Y a-t-il un moyen de faire ce que je veux faire ici?

module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('comments', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      root_id: {
        defaultValue: null,
        type: Sequelize.INTEGER
      },
      parent_id: {
        defaultValue: null,
        type: Sequelize.INTEGER
      },
    }).then(() => queryInterface.addConstraint(
      'comments',
      ['root_id'],
      {
        type: 'foreign key',
        name: 'root_id_fk',
        references: {
          table: 'comments',
          field: 'root_id'
        },
        onDelete: 'cascade',
        onUpdate: 'cascade'
      }
    )).then(() => queryInterface.addConstraint(
      'comments',
      ['parent_id'],
      {
        type: 'foreign key',
        name: 'parent_id_fk',
        references: {
          table: 'comments',
          field: 'parent_id'
        },
        onDelete: 'cascade',
        onUpdate: 'cascade'
      }
    ))
  },


0 commentaires

3 Réponses :


1
votes

J'ai compris ce que je faisais mal, j'essayais de créer une clé étrangère pour se référencer sur la même table alors que j'étais censé référencer une colonne différente. Woops!


0 commentaires

0
votes
module.exports = {
  up: function(queryInterface, Sequelize) {
    return queryInterface.sequelize.query("ALTER TABLE app_users ADD CONSTRAINT unique_user_email UNIQUE (email,column2,column3);")
  },
  down: function(queryInterface, Sequelize) {
    return queryInterface.sequelize.query("ALTER TABLE app_users DROP INDEX unique_user_email;")
  }
};

0 commentaires

0
votes

Pour tous ceux qui recherchent une réponse sur la façon d'ajouter des clés étrangères, utilisez ceci Sequelize Contraintes


0 commentaires