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