如何使用 sequelize-typescript 从源实例创建关联实例

Posted

技术标签:

【中文标题】如何使用 sequelize-typescript 从源实例创建关联实例【英文标题】:how to create association instance from source instance with sequelize-typescript 【发布时间】:2020-02-22 15:14:34 【问题描述】:

我有 1:n 关联Company -> CompanySettings, 我想要的是,我通过 Id 找到 Company,然后通过该实例创建 companySettings 并自动填充外键属性

using sequelize-typescript

我已经从关联函数及其作品中尝试了$get$add$count

但是当我尝试$create 函数时,它给了我错误

公司类

@Table(
  tableName: 'company',
)
export class Company extends Model<Company> 

  @Column( allowNull: false, type: DataType.STRING(50) )
  name: string

  @CreatedAt
  @Column( field: 'created_at' )
  createdAt: Date

  @UpdatedAt
  @Column( field: 'updated_at' )
  updatedAt: Date

  @Column( field: 'is_deleted', defaultValue: 'f', type: DataType.BOOLEAN )
  isDeleted: boolean

  @HasMany(() => CompanySettings)
  settings: CompanySettings[]

CompanySettings 类

@Table(
  tableName: 'company_settings',
)
export class CompanySettings extends Model<CompanySettings> 

  @ForeignKey(() => Company)
  @Column
  idCompany: number

  @BelongsTo(() => Company)
  company: Company

  @Column( type: DataType.ENUM('default', 'alwaysApprove', 'alwaysAsking') )
  defaultBookingApproval: defaultBookingOptions

  @Column( type: DataType.SMALLINT )
  budgetPeriod: number

  @Column( type: DataType.CHAR(2) )
  startDate: string

  @CreatedAt
  @Column
  createdAt: Date

  @UpdatedAt
  @Column
  updatedAt: Date

  @Column( defaultValue: 'f', type: DataType.BOOLEAN )
  isDeleted: boolean

控制器

const companies = await Company.findOne()

    return await companies.$create('settings',  startDate: '22' )

找到源实例后,我想创建与源实例相关的新实例

但我得到的错误如下所示

TypeError: this[("create" + string_1.capitalize(...))] is not a function

告诉我我哪里错了?

【问题讨论】:

【参考方案1】:

如果你想创建一个设置,你应该编写如下代码

companies.$create('setting', startDate: '22 )

而不是 companies.$create('settings', startDate: '22' )

如果你想创建批量,你应该喜欢下面

companies.$create('settings', [ startDate: '22', startDate: '23'] )

【讨论】:

以上是关于如何使用 sequelize-typescript 从源实例创建关联实例的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Sequelize-Typescript 模型定义指定 NestJs 控制器的返回类型?

sequelize-typescript - 当使用带有 `tsc` 编译器(带有 NestJS)的 glob 配置时,无法解析模型模块

Node.js 和 sequelize-typescript - 数据访问对象和业务对象

sequelize-typescript:模型中get()的通用方法

Sequelize-typescript 'HasManyCreateAssociationMixin' 不是函数

sequelize/sequelize-typescript - 带有 HasMany 的 findAll 返回一个对象而不是数组