Sequelize Many to Many - 如何创建新记录和更新连接表

Ric*_*kes 14 javascript mysql sequelize.js

我正在构建一个带有node,express和sequelize的简单数据库.我已经创建了我的模型,并且sequelize在我的数据库中创建了表.

我有模特用户和城市,有很多关系.Sequelize创建了表Users,Cities和一个连接表CitiesUsers:with UserId和CityId.

我的问题是,当我创建新用户时,如何更新该连接表?在创建时忽略CityId属性.

   //Models use 
   //City.hasMany(User);
   //User.hasMany(City);

   var user = User.build({
      first_name: 'John',
      last_name: 'Doe',
      CityId: 5
    });

    user.save();
Run Code Online (Sandbox Code Playgroud)

Ric*_*kes 10

在深入研究文档之后,我相信我找到了答案.

在创建多对多关系时,sequelize会为每个模型创建get,set和add方法.

从博客假设模型用户和项目有很多到多个:http: //docs.sequelizejs.com/en/latest/docs/associations/#belongs-to-many-associations

这将添加方法getUsers,setUsers,addUsers到Project,以及getProjects,setProjects和addProject到User.

所以在我的情况下,我做了以下"城市"是从City.find返回的特定城市模型...

//user.setCities([city]);

models.User.find({ where: {first_name: 'john'} }).on('success', function(user) {
  models.City.find({where: {id: 10}}).on('success', function(city){
    user.setCities([city]);
  });      
});
Run Code Online (Sandbox Code Playgroud)


Dan*_*van 6

一旦创建了城市模型和用户模型,就可以创建用作联接表的模型的新实例。

const User = sequelize.define('user')
const City = sequelize.define('city')
const UserCity = sequelize.define('user_city')

User.belongsToMany(City, { through: UserCity })
City.belongsToMany(User, { through: UserCity })

Promise.all([User.create(), City.create()])
    .then(([user, city]) => UserCity.create({userId: user.id, cityId: city.id}))
Run Code Online (Sandbox Code Playgroud)