자식 테이블까지 Insert 하기
const result: Product = await Product.create(createProductDto, {
include: includeStatement
});
// ProducdtDto.ts
export interface CreateProductDto {
name: string;
description?: string;
count?: number;
productImages?: ProductImageDto[];
}
typescript 예시입니다. Sequelize의 include를 사용하면 관계를 맺고있는 자식 테이블까지 함께 insert를 칠 수 있습니다. hasOne이든 hasMany든 Sequelize가 그에 맞게 insert를 해줍니다 !
상황에 다른 쿼리?
위 코드는 많은 상황에서 문제가 발생할 수 있습니다.
특히 자식 테이블의 필드들이 전부 nullable이고, 1:0이 될 수 있는 관계라면 그 자식테이블의 정보를 API Request로 전송받지 않더라도(Insert할 필요가 없는데도) null로 판단해서 부모의 fk만 가진채 빈 껍데기로 insert 되어서 DB에 들어가게 됩니다.
그래서 우리는 존재하는 필드만 include에 포함시켜야 합니다. 그런데 include:{ option } 안에서 분기(if)를 칠 수 있는 방법은 없습니다.
아래와 같은 방법을 사용하면 이를 해결할 수 있습니다.
const includeStatement = [];
if(createProductDto.productImages) includeStatement.push(ProductImage);
if(createProductDto.productLimit) includeStatement.push(ProductLimit);
if(createProductDto.productOption) includeStatement.push(ProductOption);
if(createProductDto.productCompany) includeStatement.push(ProductCompany);
const result: Product = await Product.create(createProductDto, {
include: includeStatement
});
감사합니다
'Server > Node.js' 카테고리의 다른 글
NodeJS - 전역 예외 핸들러 구현 (Custom global exception handler) (0) | 2021.12.29 |
---|---|
NodeJS - API Response를 snake case로 변환하기(DTO, Entity 필드는 camel case) (0) | 2021.12.27 |
NodsJS - BullMQ 사용 (대기열, 동시성 제어 등) (0) | 2021.12.25 |
NodeJS - 모델매퍼(ModelMapper) 사용 [Class transformer] (0) | 2021.12.24 |
NodeJS - JSON null필드를 Response에서 생략하는 방법! (0) | 2021.12.21 |