2016-07-29 4 views
0

Ich benutze Sequelize für Knoten und ich habe Benutzer und Elemente. Ein Benutzer kann auf verschiedene Arten mit einem Gegenstand interagieren, wie zum Beispiel durch Wählen oder Anreden (in diesem Fall zwei verschiedene Dinge).Mehrere Arten von vielen zu viele Beziehungen zwischen zwei Tabellen in Sequalize

Mein erster Gedanke war, zwei verschiedene viele zu viele Beziehung zu haben, aber Sequelize hat nur einen removeItem-Aufruf, und ich habe nicht herausgefunden, wie zu spezifizieren.

Plan 2 war eine viele zu viele Tabelle mit einem zusätzlichen Element "Typ" zu bauen, damit ich die Art angeben konnte. Ich kann den Typ angeben, wenn das Ding hinzugefügt wird. Dies führte zu zwei Problemen, eines sind Forign-Schlüssel und standardmäßig das Paar einzigartig. Ich korrigierte dies, indem ich die Bedingung manuell aus der Datenbank löschte, und das schien ausreichend zu sein (ich habe eine ID als Primärschlüssel-Autoinkrementierung gesetzt). Zweitens, ich kann nicht herausfinden, wie man das Löschen spezifiziert, wo Typ = der Typ, den ich möchte.

Code:

die Tabelle zu erstellen:

var UserActions = sequelize.define('userActions', { 
id: { 
    type: DataTypes.INTEGER, 
    primaryKey: true, 
    autoIncrement: true 
}, 
type:  DataTypes.STRING 
}); 

das Element zu entfernen:

 models.Item.findOne({where: {id : params.itemID}}).then(function (video){   
     models.User.findOne({where: {id : params.itemID}}).then(function (user){    
      if(params.applaud == "true") { 
       console.log("Add applaud"); 
       user.addItem(video,{type:"commend"}); 
      } else { 
       user.removeItem(item,{where: {type:"commend"}}); 
       console.log("Remove, Commendation"); 
      } 
      res.json({'response' : 'Success'}); 
    });  
}); 

Das Problem ist, das alle Interaktionen zwischen dem Elemente löschen wird und der Benutzer, wenn Ich möchte nur die Empfehlung löschen.

Wie verwalte ich am besten mehrere viele zu viele Beziehungen zwischen den gleichen zwei Tabellen in Sequelize?

+0

heißt es Sequelize –

+0

Ich habe es korrigiert, danke. – Pyrodante

+0

Willst du sagen, dass Sequelize der Verwendung von MySQL im Wege steht? –

Antwort

0

OK Ich habe es herausgefunden.

Auf dem Verein, den Sie über einen Aliasnamen angeben müssen 'als'

User.belongsToMany(models.Item, {through: 'votes', as: 'votes'}); 
User.belongsToMany(models.Item, {through: 'commend', as: 'commend'}); 

Dann können Sie fügen Sie Abfrage mit:

models.Item.findOne({where: {id: item.id}, 
     include: [{ 
      model: models.User, 
      as: 'votes' 
     }] 
    }) 

Sie können mit hinzufügen:

user.addVote(item); 

oder

user.addCommend(item); 

und löschen mit:

user.removeVote(item); 

oder

user.removeCommend(item) 

Und es funktioniert wie gewünscht.

Verwandte Themen