2017-03-06 4 views
0

私はユーザーとグループの間に多対多の関係を持っています。ユーザーには多数のグループがあり、グループには多数のユーザーがいます。ソースとアソシエーションの両方で行を作成する多くのモデルから多くのモデルを続ける

私はusersテーブル、usersGroupsというグループテーブルとジャンクションテーブルを持っています。

マイUserモデル

'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を使用する必要があるが、この方法はただdocumentationのように、モデルまたはインスタンスのIDのインスタンスとして最初のパラメータを受け入れ

語ります

これに関連付けるインスタンスのインスタンスキーまたは主キー。

group.addUser(userId).then(...)を実行する必要があります。その場合、group.addUser(1).then(...)となります。

+0

申し訳ありませんが私は十分な私のポストではなかったが、私は新しいユーザーを作成したくない、私は新しいgroupIdと私が渡す既存のuserIdを参照するusersGroups接合テーブルのエントリを作成したい – Stretch0

+0

私はちょうど、アソシエーションを使ってモデルを作成することについて簡単に説明するつもりだと思っていましたが、私はあなたのケースも含めました - ユーザーをグループに割り当てました。私は答えを編集したので、この部分だけが残っています。 – piotrbienias

+0

ありがとう@piotrbienias、その作品 – Stretch0

関連する問題