2016-07-29 99 views
0

我正在使用Sequelize for Node,並且我有用戶和項目。用戶可以通過多種方式與項目進行交互,例如投票或讚美(本例中有兩種不同的方式)。在Sequalize中的兩個表之間有多種類型的多對多關係

我最初的想法是有兩個不同的多對多關係,但Sequelize只有一個removeItem調用,我還沒有想出如何指定哪個。

計劃2是用一個額外的元素「類型」建立一個多對多的表,所以我可以指定種類。我可以在添加東西時指定類型。這遇到了兩個問題,一個是外鍵,而且默認情況下,這兩個問題是唯一的。我通過從數據庫中手動刪除約束來糾正這種情況,這似乎是足夠的(我將id設置爲主鍵自動增量)。其次,我似乎無法弄清楚如何使刪除指定哪裏類型=我想要的類型。

代碼:

建表:

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

要刪除的項目:

 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'}); 
    });  
}); 

的問題是,這將刪除的項目和用戶,當之間的所有互動我希望它只能刪除表揚。

如何最好地管理Sequelize中相同兩個表之間的多個多對多關係?

+0

它叫Sequelize –

+0

我糾正它,謝謝。 – Pyrodante

+0

你是說Sequelize妨礙了MySQL的使用嗎? –

回答

0

好的我想通了。

您所指定通過別名 '爲'

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

然後你可以用添加查詢的關聯:

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

您可以添加使用:

user.addVote(item); 

user.addCommend(item); 

並與刪除:

user.removeVote(item); 

user.removeCommend(item) 

和它的作品達到目標。

相關問題