안녕하세요. nestjs typeorm을 이용해서 custom manytomany를 진행하고 있습니다.
맨 하단 Many-to-many relations with custom properties를 참고해서 만들었고 insert에 대해선 잘 작동하고 있습니다. 다만, update시 사용자가 입력한 값을 제외한 나머지는 삭제 처리하는 기능을 구현하고 있는데 insert에 대해서만 작동합니다.
데이터베이스에는 하단과 같습니다.
이때 사용자에서 이러한 데이터가 전달되면 데이터베이스는 insert합니다.
// parameters: 5
{
"vendors": [
{
"vendorId": 4
}
]
}
이때, 1번은 지워지지 않고 insert만 된 상태입니다. 제가 원하는 것은 위 데이터가 전달되었을 때 1번은 지워지고 8번은 생기는 상태로 만들고 싶습니다. 또한, 배열형태로 데이터가 들어오면 1,8번이 삭제가 되는것으로 만들고 싶습니다.
코드는 다음과 같습니다.
// vendorGroup-vendor.entity.ts
import {Entity, ManyToOne, PrimaryGeneratedColumn, Unique} from 'typeorm'
import {Vendor, VendorGroup} from './index'
import {IsInt} from 'class-validator'
@Unique(['group', 'vendor'])
@Entity({name: 'VendorGroup-Vendor'})
export class VendorGroupToVendor {
@IsInt()
@PrimaryGeneratedColumn()
id: number
@ManyToOne(() => VendorGroup, (group) => group.id, {
nullable: false,
onUpdate: 'CASCADE',
onDelete: 'CASCADE',
orphanedRowAction: 'delete'
})
group: VendorGroup
@ManyToOne(() => Vendor, (vendor) => vendor.id, {
nullable: false,
onUpdate: 'CASCADE',
onDelete: 'CASCADE',
orphanedRowAction: 'delete'
})
vendor: Vendor
constructor(partial: Partial<VendorGroupToVendor>) {
Object.assign(this, partial)
}
}
// vendor.entity.ts
@ApiHideProperty()
@OneToMany(() => VendorGroupToVendor, (vendorGroupToVendor) => vendorGroupToVendor.vendor, {
cascade: true
})
vendorGroupToVendor: VendorGroupToVendor[]
// vendor-group.entity.ts
@ApiHideProperty()
@OneToMany(() => VendorGroupToVendor, (vendorGroupToVendor) => vendorGroupToVendor.group, {
cascade: true
})
vendorGroupToVendor: VendorGroupToVendor[]
// vendor-groups.service.ts
const {vendors, ...rest} = data
const group = new VendorGroup({id, ...rest})
await this.vendorGroupRepository.save(group)
const vendorGroupToVendors: VendorGroupToVendor[] = []
for (let i = 0; i < vendors.length; i++) {
vendorGroupToVendors.push(
new VendorGroupToVendor({
id: vendors[i].id,
vendor: new Vendor({id: vendors[i].vendorId}),
group: new VendorGroup({id})
})
)
}
await this.vendorGroupVendorRepository.save(vendorGroupToVendors)
더 원하시는 코드있으면 알려주세요. 댓글로 전달해드리겠습니다.