나만의 작은 도서관
[Prisma] Include 사용법 본문
유의사항: 해당 글은 공부한 내용을 정리하는 용도이므로, 수정이 필요할 경우 내용의 수정이 있을 수 있습니다.
Include
include를 사용하면 현재 지정된 컬럼외에 추가로 다른 컬럼들을 지정할 수 있다.
기본적인 사용법
// user테이블에서 첫번째 레코드를 찾고, 해당 레코드와 연관된 posts테이블 데이터를 추가로 찾는다
const user = await prisma.user.findFirst({
include: {
posts: true,
},
})
실행결과
{
id: 19,
name: null,
email: 'emma@prisma.io',
profileViews: 0,
role: 'USER',
coinflips: [],
posts: [
{
id: 20,
title: 'My first post',
published: true,
authorId: 19,
comments: null,
views: 0,
likes: 0
},
{
id: 21,
title: 'How to make cookies',
published: true,
authorId: 19,
comments: null,
views: 0,
likes: 0
}
]
}
include 안에 include 넣기
include 구문 안에 include 구문을 넣는 것 또한 가능하다.
// user테이블에 첫번째 유저의 레코드를 찾는다.
// 또한, 해당 레코드와 연관된 post테이블의 레코드를 추가로 찾는다. (첫번째 include)
// 또한, post테이블의 레코드와 연관된 categories테이블의 추가로 레코드를 찾는다. (두번째 include)
const user = await prisma.user.findFirst({
include: {
posts: {
include: {
categories: true,
},
},
},
})
실행결과
{
"id": 40,
"name": "Yvette",
"email": "yvette@prisma.io",
"profileViews": 0,
"role": "USER",
"coinflips": [],
"testing": [],
"city": null,
"country": "Sweden",
"posts": [
{
"id": 66,
"title": "How to make an omelette",
"published": true,
"authorId": 40,
"comments": null,
"views": 0,
"likes": 0,
"categories": [
{
"id": 3,
"name": "Easy cooking"
}
]
},
{
"id": 67,
"title": "How to eat an omelette",
"published": true,
"authorId": 40,
"comments": null,
"views": 0,
"likes": 0,
"categories": []
}
]
}
Select구문과 함께 사용하기
include구문은 select구문과 같이 사용할 수 있다. (단, 같은 레벨에서 사용할 수는 없다.) 이번에는 select구문을 include와 함께 사용해보자.
// user테이블에서 첫번째 레코드를 찾는다.
// 또한, 해당 레코드와 관련된 post테이블 레코드들의 title을 선택하여 추가로 출력한다.
const user = await prisma.user.findFirst({
include: {
posts: {
select: {
title: true,
},
},
},
})
실행결과
{
"id": 1,
"name": null,
"email": "martina@prisma.io",
"profileViews": 0,
"role": "USER",
"coinflips": [],
"posts": [
{ "title": "How to grow salad" },
{ "title": "How to ride a horse" }
]
}
참고 자료
Relation queries (Concepts) | Prisma Documentation
Prisma Client provides convenient queries for working with relations, such as a fluent API, nested writes (transactions), nested reads and relation filters.
www.prisma.io