1

根据https://www.npmjs.com/package/sequelize-typescript ,我正在尝试使用 OneToOne 关联构建一个新实例

模型/测量.ts:

@Table({ tableName: "measure" })
export class Measure extends Model {
    ...

    // Token
    @ForeignKey(() => Token)
    @Column({ type: DataType.INTEGER, allowNull: false, unique: true })
    id_token!: number

    @BelongsTo(() => Token)
    token!: Token
}

模型/令牌.ts:

@Table({ tableName: "token" })
export class Token extends Model {
    ...

    // Measure
    @HasOne(() => Measure)
    measure: Measure
}

我的续集实例:

export const sequelize: Sequelize = new Sequelize({
    ...
    repositoryMode: true,
})
sequelize.addModels([Token, Measure])

export const tokenRepository = sequelize.getRepository(Token)
export const measureRepository = sequelize.getRepository(Measure)

现在我想使用现有的 Token 创建一个新的 Measure 实例:

const token = await tokenRepository.findOne({where: {value: value}})
...
console.log(token.isNewRecord) // false
const measure = measureRepository.build({...params, token: token}, {include: [{model: tokenRepository}]})
console.log(measure.token.isNewRecord) // true

await measure.save() // it try to insert an new token here

Sequelize 尝试插入新标记,而不是仅插入度量。我的错误在哪里?

4

1 回答 1

0

我前段时间遇到过这个问题,通过阅读文档并在我身边尝试了一些事情,我得出结论这是不可能的。

从我所见,您可以一次创建一个新对象,并且所有对象都是嵌套对象。但是您不能一次创建一个新对象并将其链接到其他现有对象。

为此,您必须自己进行必要的查找和/或更新。

我从来没有设法让它一步到位,文档也从来没有谈论过这个。总是说所有元素都是新的。

如果所有元素都是新的,则可以一步创建具有嵌套关联的实例。

更多详情: https ://sequelize.org/master/manual/creating-with-associations.html

于 2021-09-08T14:47:54.383 回答