英文:
Create one to many relationship object in database using Sequelize
问题
我搜索了很多,没有找到任何答案。
我的英语不是很好,所以我可能没有使用最好的关键词...
这是我的问题,是否有一种方法可以在一个查询中插入像这样的对象?
我有两个对象之间的一对多关系,定义如下:
foo可以有多个bar
bar可以有一个foo
export const foo = sequelize.define('foos', {
idfoo: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true
},
value: Sequelize.STRING,
valueInt: Sequelize.INTEGER
})
export const bar = sequelize.define('bars', {
idbar: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true
},
value: Sequelize.STRING,
valueInt: Sequelize.INTEGER
})
foo.hasMany(bar, {
foreignKey: 'idfoo'
});
bar.belongsTo(foo);
想象一下,你有这个对象,你想插入到你的数据库中。你会怎么做?
{
"value": "test",
"valueInt": 5,
"bars": [
{
"value": "test",
"valueInt": 6
},
{
"value": "test",
"valueInt": 7
}
]
}
我已经阅读了Sequelize的文档,没有找到这个问题的线索(或者可能我错过了)。我无法让这个解决方案工作https://stackoverflow.com/questions/50685266
实际上,这是我的Sequelize创建函数,我以为Sequelize会自动处理所有的导入(可能有点天真)...
static async post(body) {
await foo.create(body);
}
英文:
I've searched a lot and didn't find any answer.
My english isn't that good so i might not used the best keywords...
Here is my problem, is there a way to insert in one query an object like this ?
I have a one to many relationship between two objects define like this :
foo can have many bar
bar can have one foo
export const foo = sequelize.define('foos', {
idfoo: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true
},
value: Sequelize.STRING,
valueInt: Sequelize.INTEGER
})
export const bar = sequelize.define('bars', {
idbar: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true
},
value: Sequelize.STRING,
valueInt: Sequelize.INTEGER
})
foo.hasMany(bar, {
foreignKey: 'idfoo'
});
bar.belongsTo(foo);
Imagine you got this object you want to insert in your db. How would you do it ?
{
"value": "test",
"valueInt": 5,
"bars": [
{
"value": "test",
"valueInt": 6
},
{
"value": "test",
"valueInt": 7
}
]
}
I have read Sequelize documentation i didn't find any clue of this issue (or maybe i've missed it ).
I wasn't be able to make this solution works https://stackoverflow.com/questions/50685266
Actually here is my Sequelize create function, i thought Sequelize handled all the imports alone (pretty naive i guess)...
static async post(body) {
await foo.create(body);
}
答案1
得分: 0
首先,您需要为配对的关联项指定相同的 foreignKey
选项:
foo.hasMany(bar, {
foreignKey: 'idfoo'
});
bar.belongsTo(foo, {
foreignKey: 'idfoo'
});
这样 Sequelize 可以确保这两个模型使用相同的字段相互关联。
其次,为了一起插入主记录和子记录,您需要在 create
调用中的 foo
模型中指定 include
选项,包括 bar
模型:
static async post(body) {
await foo.create(body, {
include: [bar]
});
}
英文:
First, you need to indicate the same foreignKey
option for both paired associations:
foo.hasMany(bar, {
foreignKey: 'idfoo'
});
bar.belongsTo(foo, {
foreignKey: 'idfoo'
});
That way Sequelize can make sure these two models linked by the same fields from both ends.
Second, in order to insert both main and child records together you need to indicate the include
option in the create
call with bar
model:
static async post(body) {
await foo.create(body, {
include: [bar]
});
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论