1. some - 배열 중 하나라도 일치하는 데이터를 찾을 때 (일대다 관계에서 사용)
const product = prisma.product.findFirst({
where: {
photos: {
some: {
{ url: "2.jpg" },
}
}
},
})
some을 사용하면 배열 중 한개의 데이터라도 일치하는 항목을 불러온다.
일대일 관계에서는 데이터가 배열일 수 없으니 some을 사용하지 않고
다대다 관계에서는 따로 테이블을 생성해 관리해 some을 사용하지 않으므로
일대다 관계에서 사용된다.
Product 테이블
id | name |
1 | 상품 A |
2 | 상품 B |
3 | 상품 C |
Photos 테이블
id | url | product_id |
1 | 1.jpg | 1 |
2 | 2.jpg | 1 |
3 | 3.jpg | 2 |
4 | 2.jpg | 3 |
db가 이런 구조로 되어있을때
product = {
id: 1,
name: '상품 A',
photos: [
{ id: 1, url: '1.jpg', product_id: 1 },
{ id: 2, url: '2.jpg', product_id: 1 },
]
}
findFirst에서 some을 사용했을때의 반환값,
product = {
id: 4,
name: '상품 C',
photos: [
{ id: 4, url: '2.jpg', product_id: 3 },
]
}
findFirst에서 some을 사용하지 않았을때의 반환값이다.
findFirst에서 some을 사용하면 조건의 맞는 데이터 중에 첫번째 값 중 일치하는 데이터를 모두 불러오고
findFirst에서 some을 사용하지 않으면 조건의 맞는 데이터 중 첫번째 값만 불러오기 때문에
이런 차이를 보인다.
그렇다면 findMany와는 어떻게 다를까?
product = [
{
id: 1,
name: 'Product A',
photos: [
{ id: 1, url: '1.jpg', product_id: 1 },
{ id: 2, url: '2.jpg', product_id: 1 },
]
},
{
id: 3,
name: 'Product C',
photos: [
{ id: 4, url: '2.jpg', product_id: 3 },
]
}
]
findMany로 조건을 입력했을때의 반환값이다.
상황에 따라 적절히 사용하자!
'개발 > PrismaORM' 카테고리의 다른 글
Prisma에서 페이지네이션 구현 (0) | 2023.12.26 |
---|---|
언젠가 사용하게 될 Prisma ORM 옵션 종류 및 설명 (4) (0) | 2023.08.08 |
언젠가 사용하게 될 Prisma ORM 옵션 종류 및 설명 (2) (0) | 2023.08.01 |
언젠가 사용하게 될 Prisma ORM 옵션 종류 및 설명 (1) (0) | 2023.07.31 |
Prisma Transaction이란?, $transaction 사용 방법 (0) | 2023.06.01 |