prisma client API, 사용 예시

21550 단어 prismaprisma

index

  • data
  • where
  • select
  • connect
  • include

data [create, update]

record를 create하거나 update 할 때 들어갈 key와 value의 기입할 때 사용

const result = await client.product.create({
  data: {
    name : "",
    price: 12, 
    description: "",
    imgae: "",
  },
});

where [read]

검색하고자 하는 컬럼을 지정하고자 할 때 사용

// 특정 컬럼에 구분짓지 않고, 모든 product을 조회하겠다.
// "where이 없으면 모든 대상에서 조회하겠다" 라는 의미
const result = await client.product.findMany({}); 

// product의 컬럼 중에 id가 2인 모든 것을 조회하겠다.
const result = await client.product.findMany({
  where: {
    id: 2
  }
}); 

// product의 컬럼 중에 name이 '갤럭시'이고, price가 123 인 것을 모두 조회하겠다.
const result = await client.product.findMany({
  where: {
    name: '갤럭시',
    price: 123,
  }
});

select [read]

where에서 선택한 데이터 중에서 특정 key값만 추출하고자 할 때 사용

const result = await client.product.findMany({
  where: {
    id: 2,
  }, 
  select: {
    name: true,
    price: true,
  }
});

// { name: "", price: "" }

connect [create, update]

create 또는 update를 할 때만 사용 가능하며, 목적은 레코드를 추가할 때 @relation 관계에 있는 table의 어떠한 값과 연결시킬 것인지 지정하고자 할 때 사용한다. 아래 코드에서는 product을 추가할 때, 해당 product의 user, user 중에서 id가 어떤 것인지 지정한다. 이것을 사용하려면 양쪽의 field가 @relation으로 연결되어 있어야 한다.

const result = await client.product.create({
  data: {
    name : "",
    price: 12, 
    description: "",
    imgae: "",
    user: {
      connect: {
        id: 18,
      }
    }
  },
});

생성된 것을 조회하면, connect에서 연결했던 userId: 18 이 정보로 포함되어 있는 것을 확인 할 수 있다. 단순히 userId 18 뿐만 아니라, user의 전체 정보를 조회 할 수 있다.

[
  {
    id: 7,
    createdAt: 2022-03-20T14:24:13.100Z,
    updatedAt: 2022-03-20T14:24:13.101Z,
    userId: 18,
    image: 'xxx',
    name: '',
    price: 12,
    description: '12',
    user: {
      id: 18,
      phone: null,
      email: '[email protected]',
      name: 'Anonymous',
      avatar: null,
      createdAt: 2022-03-01T07:04:26.393Z,
      updatedAt: 2022-03-01T07:04:26.395Z
    }
  }
]

include [read]

관계를 이루고 있는 필드를 현재 조회한 쿼리에 포함시킬 때 사용

const result = await client.product.findMany({
  where: {
    id: 2, 
  },
  include: {
    user: true,
  }
});

조회 결과 : user와 product은 schema에서 @relation 되어 있음

[
  {
    id: 2,
    createdAt: 2022-03-13T10:46:04.141Z,
    updatedAt: 2022-03-20T12:48:06.522Z,
    userId: 19,
    image: 'xxx',
    name: '갤럭시',
    price: 123,
    description: '이것은 첫번째',
    user: {
      id: 19,
      phone: '01099025911',
      email: null,
      name: 'Anonymous',
      avatar: null,
      createdAt: 2022-03-02T15:06:12.018Z,
      updatedAt: 2022-03-02T15:06:12.019Z
    }
  }
]

+select와 함께 사용하기

const result = await client.product.findMany({
  where: {
    id: 2, 
  }, 
  include: {
    user: {
      select: {
        name: true,
        id: true,
      }
    }
  }
});

조회 결과

[
  {
    id: 2,
    createdAt: 2022-03-13T10:46:04.141Z,
    updatedAt: 2022-03-20T12:48:06.522Z,
    userId: 19,
    image: 'xxx',
    name: '갤럭시',
    price: 123,
    description: '이것은 첫번째',
    user: { id: 19, name: 'Anonymous' }
  }
]

connectOrCreate

고유 id 에 의해 기존 레코드를 연결하거나 또는 레코드가 존재하지 않으면, 레코드를 새로 생성할 때 사용한다.

// user : { phone: phone } 또는 { email: email } ==> phone과 email 모두 `@unique`

const token = await client.token.create({
    data: {
      payload, // token number
      // token의 user 정보는 where 정보를 조회 했을 때 
      // 이미 있으면, connect 하고
      // 없으면, { name: '', ...user } 로 user를 생성한다.
      // token 생성 쿼리에서 user를 생성할 수도 있다.
      user: {
        connectOrCreate: {
          where: {
            ...user,
          },
          create: {
            name: "Anonymous",
            ...user,
          },
        },
      },
    },
  });

좋은 웹페이지 즐겨찾기