대다 관계 필터
Prisma Client는 관계의 "대다" 측면에서 관련 레코드의 속성으로 레코드를 필터링 하는 some, every, none 및 옵션을 제공합니다.
예를 들어, 게시물의 속성을 기반으로 사용자를 필터링합니다.
RequirementQuery / option to use
"I want a list of every User that has at least one unpublished Post record" | some posts are unpublished |
"I want a list of every User that has no unpublished Post records" | none of the posts are unpublished |
"I want a list of every User that has only unpublished Post records" | every post is unpublished |
예를 들어, 다음 쿼리는 User 다음 기준을 충족하는 결과를 반환합니다.
- 조회수가 100회 이상인 게시물이 없습니다.
- 모든 게시물에 좋아요가 50개 이하입니다.
const users = await prisma.user.findMany({
where: {
posts: {
none: {
views: {
gt: 100,
},
},
every: {
likes: {
lte: 50,
},
},
},
},
})
"일대일" 관계 필터링
Prisma Client는 관계의 "일대일" 측에서 관련 레코드의 속성으로 레코드를 필터링 하는 is 및 isNot 옵션을 제공합니다. 예를 들어 작성자의 속성을 기반으로 게시물을 필터링합니다.
예를 들어 다음 쿼리는 다음 기준을 충족하는 레코드 Post 를 반환합니다.
- 작성자 이름은 Bob이 아닙니다.
- 작성자는 40세 이상입니다.
const users = await prisma.post.findMany({
where: {
author: {
isNot: {
name: "Bob"
},
is: {
age: {
gt: 40
}
}
}
}
},
})
관련 레코드가 있는지 필터링
관계 수로 필터링하는 것은 아직 지원되지 않습니다. 그러나 레코드에 관련 레코드가 있는지 여부를 필터링할 수 있습니다. 예를 들어 다음 쿼리는 none게시물이 없는 모든 사용자를 반환하는 데 사용합니다.
const usersWithZeroPosts = await prisma.user.findMany({
where: {
posts: {
none: {},
},
},
})
다음 쿼리는 하나 이상의 게시물이 있는 모든 사용자를 반환합니다.
const usersWithSomePosts = await prisma.user.findMany({
where: {
posts: {
some: {},
},
},
})
응용
const result = await prisma.user.findMany({
where: {
email: {
endsWith: 'prisma.io',
},
posts: {
some: {
published: true,
},
},
},
include: {
posts: {
where: {
published: true,
},
},
},
})
where: Post 는 적어도 하나 이상 true 인 레코드를 가진 USER 를 필터하기
추가로 in 도 정리
const ret = await prisma.signe.findMany({
where: {
id: { in: [1, 2, 12] },
}
})
const storeDataCount = await prismaRO.store.count({
where: {
service: { some: { id: { in: service } } }
}
});
where 절: store 의 service 필드 기준
service 필드에서 some 있으므로 다대 관계로 필터함을 의미
service 안의 id 필드와 필터
id 가 적어도 하나있는 서비스를 필터하기.
const getUser = await prisma.user.findMany({
where: {
// Find users where..
posts: {
some: {
// ..at least one (some) posts..
categories: {
some: {
// .. have at least one category ..
name: {
in: ['Food', 'Introductions'], // .. with a name that matches one of the following.
},
},
},
},
},
},
})
'🌸 GraphQL' 카테고리의 다른 글
prisma nexus graphql 관계 (0) | 2022.05.15 |
---|---|
[Prisma Client] null and undefined (0) | 2022.05.10 |
GraphQL server 공식문서 참고 (0) | 2022.03.26 |
useQuery, useLazyQuery (공식 문서 참고) (1) | 2022.03.08 |
데이터 유지를 prisma 를 통해 하자 (CRUD) (0) | 2022.02.28 |