나만의 작은 도서관

[TIL] 240530 캠프 46일차: Prisma: include, 관계 속성 사용법 본문

Today I Learn

[TIL] 240530 캠프 46일차: Prisma: include, 관계 속성 사용법

pledge24 2024. 5. 30. 22:01

오늘 배운 내용                                     

RegExp.test()

RegExp는 test라는 메서드를 가지고 있다. test() 메서드는 파라미터로 받은 문자열이 해당 정규식 패턴에 만족하는지 판단하여 Boolean값을 반환한다.

// 정규식 패턴 저장
const accountRegex = /^[a-z0-9]+$/;

// account변수가 해당 정규식 패턴을 만족하지 못하면 if문에 진입합니다.
if (!accountRegex.test(account)) {
  return res
    .status(400)
    .json({ message: "아이디는 영어 소문자와 숫자의 조합이어야 합니다." });
}

 

Prisma include 

prisma에는 include 라는 구문이 따로 있다. include는 select와 비슷하게 컬럼을 선택하는 역할을 하는데 select와 다른 점은 이미 선택한 컬럼을 그대로 두고 추가로 컬럼을 선택한다는 것이다. 즉, include는 컬럼 추가, select는 컬럼 선택이라 볼 수 있따. 

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

Prisma 관계 속성 사용

Prisma에서 model간의 관계를 맺는 경우가 종종 발생한다. 이 때, model간의 관계를 characterInventory CharacterInventory[] 와 같이 model 안에 속성처럼 선언하는데 해당 속성은 관계를 맺는 용도로만 사용하는 것이 아닌 실제로 일반 속성처럼 이용할 수 있으며, 관계를 맺은 model에 데이터를 추가하는 것도 가능하다. 

 

아래 코드를 보자. 해당 코드에서 characterInventory, characterItem이라는 속성이 보일 것이다. 이 속성들은 각각 캐릭터 모델이 캐릭터-인벤도리, 캐릭터-아이템 모델과 1:N관계를 맺었다는 의미를 지닌 캐릭터 model의 속성들이다. 아래 코드를 실행하면 character(캐릭터 model)에 레코드가 생성되었을때 캐릭터-인벤토리, 캐릭터-아이템 모델에 itemId컬럼의 데이터가 3인 레코드가 생성된다.  

const newCharacter = await userDataClient.character.create({
      data: {
        name,
        accountId,
        health: 500,
        power: 100,
        money: 10000,
        characterInventory: {
          create: [{itemId:3}],
        },
        characterItem: {
          create: [{itemId:3}],
        },
      },
      include: {
        characterInventory: true,
        characterItem: true,
      },
    });

오늘의 Trouble Shooting                  

- 오늘은 해결한 Trouble이 없어요!

 

오늘 한 일                                       

더보기
  • 해설 강의 코드 리뷰 및 분석
  • 서브넷 마스크, IP주소의 구분, 라우팅과 라우터 글 포스팅