在Sequelizejs中保存带有关联的对象

Nov*_*706 10 sequelize.js

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

例如,我有一个可以有1个或多个phoneNumber的联系人.目前我对这个协会有类似的东西:

global.db.Contact.hasMany(global.db.PhoneNumber, {as: 'phoneNumbers'});
Run Code Online (Sandbox Code Playgroud)

使用休息端点我想发布一个新的联系人对象(带有任何提供的电话号码)并将其保存到数据库中.我的请求对象看起来像这样:

{
    firstName: "john",
    lastName: "Doe",
    phoneNumbers: [
        { number: "555-555-5555", type: "home" }
    ]
}
Run Code Online (Sandbox Code Playgroud)

现在我传递这个对象来构建:

var contact = Contact.build(req.body);
Run Code Online (Sandbox Code Playgroud)

然后调用save(我知道我可以使用create而不是build/save但是我们在save中有自定义逻辑来跟踪修改后的数据以及哪个用户进行了修改)

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

这引发了以下错误,这是有道理的.

column "phoneNumbers" of relation "Contacts" does not exist
Run Code Online (Sandbox Code Playgroud)

sql调用正在尝试设置不存在的列"phoneNumbers"的值.我显然不希望它这样做...我真的希望用我正在创建的联系人的ID批量创建阵列中的每个phoneNumber.

我发现的唯一例子是:https://gist.github.com/sdepold/3040391我真的不想这样做......因为我来自休息端点,我想要一种方法一般地做这个操作(我会有很多带关联的模型).我还需要能够批量执行这些操作(用于从其他源导入联系人),所以我希望它是最少量的sql调用.有没有人找到一个很好的方法来做到这一点?

dan*_*ila 0

我用这个代码

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');
    });
};
Run Code Online (Sandbox Code Playgroud)
  • User 是一个具有Many UserGroup 的模型
  • req.payload 是一个 JSON
  • destroy(...) 是为了首先清空关联(如果我们进行更新)