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]);
