ค้นหาเว็บไซต์

node.js - วิธีสร้างอินสแตนซ์ความสัมพันธ์จากอินสแตนซ์ต้นทางด้วย sequelize-typescript


ฉันมีความสัมพันธ์ 1:n Company -> CompanySettings, สิ่งที่ฉันต้องการคือ ฉันค้นหา Company ตาม Id จากนั้นสร้าง CompanySettings โดยใช้ instance นั้นและเติมค่า attribute ของ foreign key ให้อัตโนมัติ

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'}] })

คำตอบ #2

โซลูชันฟิวส์ควรทำงานได้ดี

หากคุณต้องการแนบอินสแตนซ์ที่สร้างขึ้นใหม่นี้ไปยังอินสแตนซ์ต้นฉบับ ให้ทำดังนี้:

const setting = await companies.$create('setting', { startDate: '22' });
companies.set('settings', [...companies.settings, setting]);

บทความที่เกี่ยวข้อง