나만의 작은 도서관

[Prisma] Include 사용법 본문

JavaScript/Node.js

[Prisma] Include 사용법

pledge24 2024. 5. 30. 21:42
유의사항: 해당 글은 공부한 내용을 정리하는 용도이므로, 수정이 필요할 경우 내용의 수정이 있을 수 있습니다.

 

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" }
  ]
}

 

참고 자료

https://www.prisma.io/docs/orm/prisma-client/queries/relation-queries#include-deeply-nested-relations

 

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