Prisma 파헤치기

Leticia·2024년 2월 29일
0

Database

목록 보기
2/5
post-custom-banner

Prisma?

Prisma에서는 모델 정의를 통해 데이터베이스 테이블의 구조를 정의
각 모델은 데이터베이스 테이블의 열과 일치하는 속성을 가짐

<예시>


model Category {
 categoryId Int @id @default(autoincrement())
 name       String
 order      Int
 
 @@map("Categories")
}
  • Category 모델은 db에 Categories라는 테이블로 매핑
  • 이 테이블에는 categoryId, name, order라는 세 개의 열(column)= 필드(field)존재
  • 한줄은 레코드 혹은 객체

Prisma 매서드

  • prisma.categories.count() : 레코드 수
    :데이터베이스에서 특정 테이블(여기서는 categories 테이블)의 레코드 수를 세는 메서드
    const category = await prisma.categories.create({
           data: {
               name,
               order: (await prisma.categories.count()) + 1, // 현재 카테고리의 개수 + 1을 order 값으로 사용
           }, //  현재까지 데이터베이스에 저장된 카테고리의 개수를 반환
       });
-` select  : { }`  
조회된 결과에서 특정 필드를 선택하여 반환하도록 지정

````js
const category = await prisma.categories.findFirst({
    where: { name: 'SomeCategory' },
    select: { categoryId: true, name: true, order: true },
});

데이터베이스의 여러가지 필드중 id, name, order 만 반환함

  • orderBy: { 필드명: 'asc' } : 오름차순 / 내림차순으로 으로 정렬

        const categories = await prisma.categories.findMany({
            // order를 기준으로 정렬
            orderBy: { order: 'desc' }, // 'desc'는 내림차순 
       

      ````
     
  
```

prisma에서 데이터 검색할때 사용할수 있는 매서드 + 사용방법

: prisma.모델이름.매서드(옵션들)

  • findFirst()` : 첫번째로 일치하는 하나

  • findMany: 데이터베이스에서 여러 개의 결과를 반환

  • findUnique: 데이터베이스에서 고유한 결과를 반환
    findById : 프리즈마에서는 No존재
    ID를 찾을때는 findUnique 사용함

  • findCount : 데이터베이스에서 일치하는 레코드의 수를 반환

  • findManyBy : 특정 필드의 값을 기반으로 여러 개의 결과를 반환 , 주어진 조건에 맞는 모든 레코드를 반환

  • findFirstBy : 특정 필드의 값을 기반으로 첫 번째 결과를 반환, 일치하는 레코드가 없는 경우 null을 반환

    findFirst vs findUnique 무슨 차이??

    (1) findFirst :

  • 데이터베이스에서 첫 번째 일치하는 레코드를 반환

  • 그러나 일치하는 레코드가 없을 경우에는 null을 반환

  • 주로 데이터베이스에서 일치하는 레코드를 찾을 때 사용되며, 일반적으로 일부 레코드만 필요한 경우에 유용

    (2) findUnique

  • 주어진 고유 식별자(unique identifier)에 해당하는 단일 레코드를 반환

  • 고유 식별자에 해당하는 레코드가 없으면 오류가 발생

  • 일반적으로 주요 키(primary key)나 고유한 인덱스(unique index)와 관련된 레코드를 검색할 때 사용

    prisma로 검색할때는 구문을 , 로 이어 붙여요

    const user = await prisma.user.findFirst({
     where: {
       age: { greaterThan: 18 }, // 나이가 18보다 큰 사용자
       role: 'admin', // 역할이 'admin'인 사용자
     },
     select: {
       id: true, // id 필드를 반환
       name: true, // name 필드를 반환
       email: true, // email 필드를 반환
     },
    });
    console.log(user);

- where 조건절 안에 객체 형태로 있는데 그안에 조건이 들어가면 또 {  } 로 



````
````

prisma로 데이터 베이스에 반영하기

  • Create: 데이터 베이스에 새로운 레코드 추가
const newUser = await prisma.user.create({
  data: {
    name: 'John',
    email: 'john@example.com',
    age: 30,
  },
});
  • Update: 데이터베이스에서 기존 레코드를 업데이트
const updatedUser = await prisma.user.update({
  where: { id: 1 },
  data: { name: 'Updated Name' },
});
  • Delete: 데이터베이스에서 레코드를 삭제
const deletedUser = await prisma.user.delete({
  where: { id: 1 },
});
  • Upsert: 레코드가 존재하지 않으면 새로운 레코드를 생성하고, 존재하면 업데이트
const upsertedUser = await prisma.user.upsert({
  where: { email: 'new@example.com' },
  create: {
    name: 'New User',
    email: 'new@example.com',
    age: 25,
  },
  update: { name: 'Updated User' },
});
  • Bulk Create: 여러 개의 레코드를 한 번에 추가
const newUsers = await prisma.user.createMany({
  data: [
    { name: 'User 1', email: 'user1@example.com', age: 30 },
    { name: 'User 2', email: 'user2@example.com', age: 25 },
    { name: 'User 3', email: 'user3@example.com', age: 35 },
  ],
});

프리즈마 매서드 안에 들어갈수 있는 옵션들 모음

  • where: 검색 조건을 지정합니다. 특정 필드에 대한 값을 기준으로 데이터를 필터링할 수 있습니다.

  • orderBy: 검색 결과를 정렬합니다. 필드와 정렬 방향을 지정할 수 있습니다.

  • select: 반환할 필드를 선택합니다. 필요한 필드만 선택하여 성능을 향상시킬 수 있습니다.

  • include: 관계된 테이블의 데이터를 가져올 때 사용합니다. 관계된 엔터티의 데이터를 함께 가져올 수 있습니다.

  • take: 반환할 최대 레코드 수를 지정합니다. 일반적으로 페이징에 사용됩니다.

  • skip: 결과에서 건너뛸 레코드 수를 지정합니다. 레코드를 건너뛸 때 사용됩니다.

  • distinct: 중복된 값을 제거하여 유일한 값을 반환합니다.

  • groupBy: 지정된 열을 기준으로 그룹화하여 결과를 반환합니다.

  • having: 그룹화된 결과에 대한 조건을 지정합니다. groupBy와 함께 사용됩니다.

  • cursor: 페이징 작업에 사용되며, 이전 쿼리의 결과에서 다음 결과를 가져오는 데 사용됩니다.

  • asRaw: raw 모드에서 실행할 때 사용됩니다.

  • rejectOnNotFound: 데이터를 찾을 수 없을 때 에러를 발생시킬지 여부를 결정합니다.

  • includeDeleted: 소프트 삭제된 데이터를 포함할지 여부를 결정합니다.

  • whereUnique: 고유한 값을 기반으로 데이터를 검색합니다. 주로 단일 레코드를 찾을 때 사용됩니다.

profile
Hi Hi
post-custom-banner

0개의 댓글