전체 조회
async findAll(): Promise<Product[]> {
const products = await this.productRepository.find();
if (!products) throw new NotFoundException('상품이 존재하지 않습니다.');
return products;
}
where절만 옵션을 줄때는 findBy로 where생략이 가능하다.
async findByMemberId(memberId: number) {
const products = await this.productRepository.findBy({ member_id: memberId });
return products;
}
검색어로 조회
async search(search: SearchProductDto): Promise<Product[]> {
const { searchString } = search;
const products = await this.productRepository.find({ where: { name: Like(`%${searchString}%`) } });
return products;
}
정렬, 선택, 조인
async findPickedProducts(memberId: number) {
const result = await this.pickRepository.find({
where: { member_id: memberId },
relations: { product: true },
select: { member_id: true },
order: { createdAt: 'DESC' },
});
if (!result.length) throw new NotFoundException('상품이 존재하지 않습니다.');
const pickedProducts = result.map((item) => {
return item.product;
});
return pickedProducts;
}
relations: { product: { productImages: true } },
//이렇게 하면 이중 조인이 가능하다.
엔티티에 eager:true라는 옵션을 주면 조회할 때 relatons 옵션을 주지 않아도 연결된 테이블이 같이 조회된다.
@OneToMany(() => ProductImage, (productImage) => productImage.product, { eager: true })
productImages: Product[];
find*
methods