2017-03-06 60 views
0

我在用戶和組之間有多對多的關係。用戶有許多組,並且一個組有許多用戶。在源和關聯中創建行Sequelize多對多模型

我有一個用戶表,一個組表和一個名爲usersGroups的聯結表。

我的用戶模型:

'use strict'; 
module.exports = function(sequelize, DataTypes) { 
    var User = sequelize.define('User', { 
    firstName: DataTypes.STRING, 
    lastName: DataTypes.STRING, 
    email: DataTypes.STRING, 
    username: DataTypes.STRING, 
    facebookId: DataTypes.STRING, 
    password: DataTypes.STRING, 
    }, { 
    classMethods: { 
     associate: function(models) { 
     User.hasMany(models.Payment); 
     User.hasMany(models.Friend, {foreignKey: 'userIdLink1', allowNull: false}); 
     User.belongsToMany(models.Group, { as: 'Groups', through: 'usersGroups', foreignKey: 'userId' }); 
     } 
    }, 
    instanceMethods: { 
     toJSON: function() { 
     var values = Object.assign({}, this.get()); 

     delete values.password; 
     return values; 
     } 
    } 
    }); 
    return User; 
}; 

我的組模型

'use strict'; 
module.exports = function(sequelize, DataTypes) { 
    var Group = sequelize.define('Group', { 
    }, { 
    classMethods: { 
     associate: function(models) { 
     // associations can be defined here 
     Group.belongsToMany(models.User, { as: 'Users', through: 'usersGroups', foreignKey: 'groupId' }); 
     } 
    }, 
    instanceMethods: { 
     toJSON: function() { 
     var values = Object.assign({}, this.get()); 

     delete values.password; 
     return values; 
     } 
    } 
    }); 
    return Group; 
}; 

當我嘗試創建新組與下列2種方法相關的用戶,它會創建一個新的組,但沒有關聯

const values = { 
    userId: 1 
} 

const options = { 
    include: db.Users 
} 

db.Group 
    .create(values, options) 
    .then((group) => { 
    res.send(group) 
    }).catch(err => { 
    res.status(500).send({err: err}) 
    }) 

db.Group 
    .create() 
    .then((group) => { 

    group.addUser({ userId: 1 }).then(result => { 
     res.send(result) 
    }).catch(err => { 
     res.status(500).send({err: err}) 
    }) 

    }).catch(err => { 
    res.status(500).send({err: err}) 
    }) 

回答

1

如果你只是想分配用戶到新創建的組,你需要使用addUser,就像你一樣,但是這個方法接受第一個參數作爲模型或實例ID的情況下,就像documentation

與此關聯的實例或主鍵。

所以你必須執行group.addUser(userId).then(...),在你的情況下,將group.addUser(1).then(...)

+0

對不起,也許我的帖子還不夠清晰,但我不想創建一個新用戶,我想在usersGroups聯結表中創建一個條目,它引用新的groupId和我傳入的現有userId – Stretch0

+0

我知道,我只是想簡要描述一下創建關聯的模型,但我還包括了你的情況 - 將用戶分配給組。我編輯了答案,所以現在只剩下這部分。 – piotrbienias

+0

感謝@piotrbienias,這工作 – Stretch0

相關問題