조회시 관계테이블의 필드제외하기

broccoli·2021년 6월 12일
0

sequelize

목록 보기
3/7

위와 같이 users와 posts 테이블 그리고 그 둘의 관계테이블인 likes을 예로 보자.

  • 테이블 users의 모델은 USER 테이블 posts의 모델은 POST라고 할 때 이 둘의 관계는 1대다이다.
  • 그리고 이 둘의 관계테이블은 'likes'테이블이 있는데 이것은 users와 posts와 다대다의 관계에 있다.

시퀄라이즈를 사용시 User와 Post의 추가적인 관계를 표현할때 알리아스를 사용할 수 있다.
접합테이블 likes를 만들 때 User와 Post를 각각 Liker, Liked의 알리아스로 표현했다.

이제 포스트의 좋아요를 한 유저정보를 조회해올 것인데 만약 아래와 같이 조회를 해보자.

const post = await Post.findOne({
  where: { postKey, isDeleted: false },
    {
      model: User,
      as: 'Liker',
      attributes: ['id'],
    }
  ]
})

이 결과는 아래와 같은 정보가 조회된다.

{
 // ... post 컬럼정보들
"Liker": [
  {
  "id": 1,
  "likes": {
    "createdAt": "2021-06-12T06:33:52.000Z",
    "updatedAt": "2021-06-12T06:33:52.000Z",
    "postId": 1,
    "userId": 1
    }
  }
]
}

likes 테이블의 정보가 필요없는 경우 이것들을 제외하려면 아래와 같이 조회해야한다.

const post = await Post.findOne({
  where: { postKey, isDeleted: false },
    {
      model: User,
      as: 'Liker',
      attributes: ['id'],
      through: {
        attributes: []
      }
    }
  ]
})

이 결과는 아래와 같이 likes 테이블의 컬럼정보가 제외된다.

//결과
{
//...post 컬럼정보 etc
"Liker": [
 {
 "id": 1
 }
]	
}
profile
🌃브로콜리한 개발자🌟

0개의 댓글