2016-09-08 4 views
1

Ich erstelle eine selbst-Referenzierung von "anglesomeToMany" Beziehung mit Sequelize mit einem Modell als Through-Argument.Sequelize gehörtToMany Selbstreferenz nicht erstellen Fremdschlüssel

Wenn jedoch die Tabelle erstellt wird, erstellt sie nur einen Fremdschlüssel für eine der Beziehungen.

Modell:

const client = sequelize.define('client', { 
    ClientId: { 
     type: DataTypes.UUID, 
     primaryKey: true, 
     allowNull: false, 
     defaultValue: DataTypes.UUIDV4() 
    }, 
    AccessMode: { 
     type: DataTypes.ENUM('allow_all', 'deny_all', 'selective'), 
     allowNull: false 
    } 
}, { 
    classMethods: { 
     associate: function (models) { 
      // Tons of other relationships here 

      client.belongsToMany(models.client, { 
       through: models.clientAccess, 
       as: 'clientsWithAccess', 
       foreignKey: 'ClientId' 
      }); 

      client.belongsToMany(models.client, { 
       through: models.clientAccess, 
       as: 'accessToClients', 
       foreignKey: 'AccessingClientId' 
      }); 

     } 
    } 

}); 

Das Durch Modell:

const clientAccess = sequelize.define('clientAccess', { 
    Access: { 
     type: DataTypes.ENUM('allow', 'deny'), 
     allowNull: false 
    } 
}, { 
    timestamps: false 
}); 

Die resultierende Tabelle hat nur die Spalte Access und AccessingClientId. Aus irgendeinem Grund wird AccessingClientId als Primärschlüssel festgelegt.

Wenn ich die Platzierungen der AngiesToMany() -Anweisungen wechseln, wird der Name des Feldes in der Tabelle auch umgekehrt.

Antwort

0

Dies wurde mit der otherKey -Eigenschaft der Methode "objectsToMany()" gelöst.

 client.belongsToMany(models.client, { 
      through: models.clientAccess, 
      as: 'clientsWithAccess', 
      foreignKey: 'ClientId', 
      otherKey: 'AccessingClientId' 
     }); 

     client.belongsToMany(models.client, { 
      through: models.clientAccess, 
      as: 'accessToClients', 
      foreignKey: 'AccessingClientId', 
      otherKey: 'ClientId' 
     }); 

Damit wurde die Tabelle in der Datenbank korrekt erstellt.

Verwandte Themen