Sequelize.js 在Sequelizejs中保存具有关联的对象

Sequelize.js 在Sequelizejs中保存具有关联的对象,sequelize.js,Sequelize.js,据我所知,使用Sequelizejs,在保存对象本身时似乎没有保存对象关联的方法 例如,我有一个联系人可以有一个或多个电话号码。目前我为协会准备了类似的东西: global.db.Contact.hasMany(global.db.PhoneNumber, {as: 'phoneNumbers'}); 使用rest端点,我想发布一个新的联系人对象(带有任何提供的电话号码),并将其保存到数据库中。我的请求对象如下所示: { firstName: "john", lastName:

据我所知,使用Sequelizejs,在保存对象本身时似乎没有保存对象关联的方法

例如,我有一个联系人可以有一个或多个电话号码。目前我为协会准备了类似的东西:

global.db.Contact.hasMany(global.db.PhoneNumber, {as: 'phoneNumbers'});
使用rest端点,我想发布一个新的联系人对象(带有任何提供的电话号码),并将其保存到数据库中。我的请求对象如下所示:

{
    firstName: "john",
    lastName: "Doe",
    phoneNumbers: [
        { number: "555-555-5555", type: "home" }
    ]
}
现在,我将此对象传递给构建:

var contact = Contact.build(req.body);
然后调用save(我知道我可以使用create而不是build/save,但是我们在save中有自定义逻辑来跟踪修改的数据以及修改的用户)

这会引发以下错误,这类错误是有意义的

column "phoneNumbers" of relation "Contacts" does not exist
sql调用试图设置不存在的列“PhoneNumber”的值。我显然不想让它那样做。。。我真的希望它在数组中批量创建带有我正在创建的联系人ID的每个电话号码

我发现的唯一一个例子是:我真的不想这样做。。。由于我来自rest端点,所以我希望有一种通用的方法来执行此操作(我将有许多具有关联的模型)。我还需要能够批量执行这些操作(用于从其他来源导入联系人),因此我希望它是sql调用的最小数量。有人找到了一个好方法吗?

我使用这个代码

var createUser = function(req, reply) {
    db.User.create(req.payload).success(function(user) {
        saveGroups(req, reply, user);
    }).error(function(err) {
        console.error('Error occured', err);
        reply('Error');
    });
};

var saveGroups = function(req, reply, user) {
    db.UserGroup.destroy("user_id=" + user.id).success(function() {
        var groups = req.payload.userGroups;
        if (groups && groups.length > 0) {
            for (var i = 0; i < groups.length; i++) {
                groups[i].user_id = user.id;
            }
            db.UserGroup.bulkCreate(groups).success(function() {
                reply(user);
            }).error(function(err) {
                console.error('Error occured', err);
                reply('Error');
            });
        } else {
            reply(user);
        }
    }).error(function(err) {
        console.error('Error occured', err);
        reply('Error');
    });
};
var createUser=函数(请求,回复){
db.User.create(请求有效负载).success(函数(用户){
存储组(请求、回复、用户);
}).error(函数(err){
console.error('发生错误',err);
答复(“错误”);
});
};
var saveGroups=函数(请求、回复、用户){
db.UserGroup.destroy(“user\u id=“+user.id”).success(函数(){
var组=req.payload.userGroups;
如果(groups&&groups.length>0){
对于(变量i=0;i
  • 用户是一个具有多个用户组的模型
  • 有效负载来自一个JSON
  • destroy(…)用于首先清空关联(以防我们进行更新)

Sequelize v4引入了一项新功能,允许创建实例以及任何关联实例

在您的情况下,它允许针对单个用户添加多个电话号码,如下所示

return Contact.create({
  firstName: 'John',
  lastName: 'Doe',
  PhoneNumbers: [
    {
      number: '555-555-5555',
      type: 'home'
    },
    {
      number: '555-555-7777',
      type: 'work'
    }
  ]  
}, {
  include: [{
    association: Product.PhoneNumber
  }]
});

详细的文档可以在这里找到

我有完全相同的问题。你找到答案了吗?我还在续集1.7上。我从来没有找到一个优雅的解决方案。此后,我转到了其他不使用Sequelize的项目。
return Contact.create({
  firstName: 'John',
  lastName: 'Doe',
  PhoneNumbers: [
    {
      number: '555-555-5555',
      type: 'home'
    },
    {
      number: '555-555-7777',
      type: 'work'
    }
  ]  
}, {
  include: [{
    association: Product.PhoneNumber
  }]
});