如何在不创建模型的情况下插入对模型的引用?
How do you insert a reference to a model without creating it?
我的模型 A 可以关联一行或多行模型 B。这种关系只需要一种方式。
我运行:
result = await A.query()
.where('id', 123) // 123 is an already existing model A
.insertGraph([
{
B: [{id: 456}] // 456 is an already existing model B
}
]);
但是我得到一个错误Key (id)=(456) already exists.
据我了解,Objection 正在尝试创建一个 ID 为 456 的新模型 B,我只想在两行 A:123 和 B:456 之间添加一个关系。
既然你在更新,我就不使用了insertGraph()
。可以用 upsertGraph()
使用 refs
来完成。但是这个方法有点复杂,理想情况下我会这样做:
const a = await A
.query()
.findById(123);
const numRelatedRows = await a.$relatedQuery('B')
.relate(456)
使用 upsertGraph()
,您将以这种方式关联 child 456,但 child 的其余部分(如果存在) 将不相关 .您可以使用很多选项修改 upsert 的行为,但对我来说 $relatedQuery()
是可行的方法:
const result = await A.upsertGraphAndFetch(
{
id: 123,
B: [
{#ref: 456} // relate 456, and unrelate the rest, since not present here
]
}
)
我的模型 A 可以关联一行或多行模型 B。这种关系只需要一种方式。
我运行:
result = await A.query()
.where('id', 123) // 123 is an already existing model A
.insertGraph([
{
B: [{id: 456}] // 456 is an already existing model B
}
]);
但是我得到一个错误Key (id)=(456) already exists.
据我了解,Objection 正在尝试创建一个 ID 为 456 的新模型 B,我只想在两行 A:123 和 B:456 之间添加一个关系。
既然你在更新,我就不使用了insertGraph()
。可以用 upsertGraph()
使用 refs
来完成。但是这个方法有点复杂,理想情况下我会这样做:
const a = await A
.query()
.findById(123);
const numRelatedRows = await a.$relatedQuery('B')
.relate(456)
使用 upsertGraph()
,您将以这种方式关联 child 456,但 child 的其余部分(如果存在) 将不相关 .您可以使用很多选项修改 upsert 的行为,但对我来说 $relatedQuery()
是可行的方法:
const result = await A.upsertGraphAndFetch(
{
id: 123,
B: [
{#ref: 456} // relate 456, and unrelate the rest, since not present here
]
}
)