我已经为sequelize创建了我的模型。我有一个附加为Address对象的User模型。链接定义如下:
User.hasMany(Address);
Address.belongsTo(User);
我想要存储的对象具有附加子项的正确结构:
{
Username: "John",
Email: "John@test.com",
Address: [{
street: "somestreet"
}]
};
当我尝试创建对象时,父项插入到我的数据库中,但是应用程序退出时[sequelize object]不包含方法.save()
我创建如下:
User.create(user).success(function(user){
});
我已经在我的sequelize实例上启用了日志记录,我可以看到为父对象生成了正确的sql,但我仍然坚持如何正确存储子(关联)对象。
答案 0 :(得分:1)
我认为您不能像这样创建关联对象。
其他事项:您不应再使用成功处理程序。用户.then
,.catch
和.finally
代替。
我假设您的userId
模型有一个主键User
。否则,请使用您的主键替换以下示例中的userId
,该主键可能是Username
。
你应该这样做:
var user = {
Username: "John",
Email: "John@test.com"
};
User.create(user).then(function(user) {
// sequelize passes the newly created object into the callback,
// and we named the argument "user".
// "user" is now a sequelize instance that has the association
// methods of add[AS]. So we use it.
var address = Address.build({
street: "somestreet"
};
return user.addAddress(address);
}).then(function(address){
//do something with address?
}).catch(function(err){
//do something with your err?
});
有时候关联方法可能并不理想,原因很多,我在此不再赘述。很高兴知道这种替代方式,它只是使用新创建的用户实例的id来创建新地址:
User.create(user).then(function(user) {
var address = {
street: "somestreet"
userId: user.userId
}
return Address.create(address);
}).then(function(address){
//do something with address?
}).catch(function(err){
//do something with your err?
});
答案 1 :(得分:1)
原来Wrikken的评论是正确的,我传递了一个唯一的对象,而不是一个数组。
这解决了它:
{
Username: "John",
Email: "John@test.com",
Address: [{
street: "somestreet"
}]
};
答案 2 :(得分:0)
您还可以使用include
关键字,如下所示:
const user = {
Username: "John",
Email: "John@test.com",
Address: [
{
street: "somestreet"
}
]
}
User.create(user, {
include: [models.address]
})
.then((createdUser) => {
// ...
})
其中models
是一个包含所有Sequelize模型及其关联的对象。