2017-07-08 3 views
1

Ich habe ein Szenario, in dem ich versuche, einen Datensatz aus einer Tabelle mit einer Viele-zu-viele-Beziehung sowie die übereinstimmende recordId innerhalb der Junction (durch) Tabelle, die meine zwei Tabellen verbindet. Ich weiß, es gibt set und get Methoden zum Erstellen eines Datensatzes für eine Tabelle und dann automatisch die Beziehung in der through Tabelle erstellen, aber gibt es einen Weg zu delete?Sequelize - Datensätze mit vielen zu vielen Beziehung und durch Tabelle zu zerstören

Hier ist die Beziehung:

Benutzer

User.belongsToMany(db.Organization, { through: 'organization_member', foreignKey: 'user_id'}) 

Organisation

Organization.belongsToMany(db.User, { through: 'organization_member', foreignKey: 'organization_id'}) 

Hinweis beide foreignKey der aliased werden von Sequelize Fall Kamel, weshalb die Nachricht Fehler anders als die in der Vereinigung erwähnte Spalte.

Und ich versuche, einen Befehl zu zerstören für die user Tabelle, wo jeder Benutzer mit der Organisation verbunden ist, die mit der aktuellen Benutzer-Sitzung verbunden ist. Leider funktioniert der folgende Befehl nicht, da organization_id nicht in der user Tabelle, aber der organization_member Junction-Tabelle vorhanden ist. Kann jemand helfen?

deleteUsers: function(organizationId, t){ 
     console.log("Step 10: Delete Users"); 
     //DELETE users 
     return models.User.destroy({ 
      where: { 
       organizationId: organizationId 
      } 
     },{ transaction: t }) 
    } 

Fehler:

{ [SequelizeDatabaseError: column "organizationId" does not exist] 

Antwort

0

Sie haben zwei Probleme

1) Sie versuchen, Benutzer von Organisations-ID zu löschen, aber die Benutzer haben keine organization_id Spalte, Die Tabelle organization_member enthält diese Spalte. Versuchen Sie, die Zuordnung von Benutzer und Organisation zu entfernen, oder versuchen Sie, den Benutzer zu entfernen?

2) Sie kämpfen Sequelize auf Spaltennamen. Ich denke, Ihre beste Wette ist, Sequelize zu konfigurieren, um nur Unterstriche oder Camel Cases für alle Fremdschlüssel zu verwenden. Auf diese Weise müssen Sie sich keine Sorgen darüber machen, dass Sie es immer übertreiben.

Hier ist meine config:

const db = module.exports = new Sequelize(url, { 
    dialect: 'postgres', 

    define: { 
    underscored: true,  // use snake_case rather than camelCase column names 
    freezeTableName: true, // don't change table names from the one specified 
    timestamps: true,  // automatically include timestamp columns 
    } 
}); 
+0

Danke für die Antwort. 1) Beide. Ich versuche, die Verknüpfung zu entfernen, dann diese Benutzer einen Teil der entfernten Verknüpfung. Diese Methode ist Teil einer größeren Kette von Aktionen zum Löschen eines Kontos aus meiner Anwendung. 2) Guter Anruf. – cphill

Verwandte Themen