【问题标题】:Sequelize Typescript create object with associationsSequelize Typescript 创建具有关联的对象
【发布时间】:2021-09-08 22:47:54
【问题描述】:

根据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
}

模型/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 尝试插入新标记,而不是仅插入度量。我的错在哪里?

【问题讨论】:

    标签: node.js typescript sequelize.js sequelize-typescript


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-09-09
      • 2016-04-07
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 2020-10-11
      相关资源
      最近更新 更多