2016-06-21 93 views
3

我有一個實例,我有用戶角色。我有以下幾點:更新嵌套關聯

var User = sequelize.define("Users", { 
    username: DataTypes.STRING, 
    password: DataTypes.STRING, 
    }); 

    var Role = sequelize.define("Role", { 
    role: DataTypes.STRING 
    }); 

    var UsersRole = sequelize.define("UsersRole"); 

    User.belongsToMany(Role, {through: UsersRole}); 

與用戶ID和角色ID列我創建一個數據庫中的UsersRoles表。這一切工作正常,但現在我想能夠更新用戶角色,我不能解決如何做到這一點!我試着至今沒有運氣以下:

models.Users.findAll({ 
    where: { id: req.params.id }, 
    include: [{ all: true }] 
}).then(function(dbUser){ 
    dbUser[0].Roles[0].updateAttributes({ 
      RoleId: req.body.role, 
     }, 
     { 
      where: { UserId : req.params.id } 
     } 
    ).then(function (result) {... 

總之,所有我想做的就是能夠改變一個用戶的角色,所以更新「UsersRoles」表並更改角色ID給定用戶標識。我似乎無法弄清楚如何通過任何續集語法來獲取表格!

我可以寫一些原始的SQL,但這不正確?

編輯

我只是想更新的用戶角色,如果表中有:

| UserId | RoleId | 
------------------- 
| 1 | 1 |

我希望能夠將其改爲:

| UserId | RoleId | 
------------------- 
| 1 | 2 |

但我不能完全弄清楚這些代碼!

回答

2

沒有必要直接連接表互動 - 你可以簡單地做

user.setRoles([newRole]); 
說我傳遞一個數組

http://docs.sequelizejs.com/en/latest/api/associations/belongs-to-many/#setassociationsnewassociations-options-promise

注意,因爲用戶可以有多種角色 - set移除了所有當前分配的角色。如果你想添加一個新的角色,並保持現有的,使用

user.addRole(newRole); 
+1

一些注意事項:如果您只需要一個用戶,請改用'findOne'或'findById'。另外,如果你不打算使用它們,則不需要「包含:全部」 –

0

您正在更新RoleId但您尚未定義它。如果您沒有在表上定義主鍵,默認情況下,Sequelize通過名稱定義主鍵,如果id,則應該執行id: req.body.role

+0

其實「角色ID」在表中被創建作爲協會的一部分,這是一個我想更新,sequelize創建的表我沒有'id'列 – Jamie

+0

更新角色的另一種方式就像這個'dbUser [0] .Roles [0] .RoleId = req.body.role; dbUser [0] .Roles [0] .save();'。此外,爲什麼你需要第二個地方第一個條件將照顧過濾用戶的地方。 –

+0

感謝您的答案,我試過這個,但它仍然無法正常工作,我擔心我試圖破解這一點,實際上有一種「續集」的方式來做到這一點,我應該試試呢? – Jamie