sequelize에서 foreign key로 설정된 데이터들을 어떻게 가져올 수 있을까?

Hazel_Song·2020년 10월 18일
0

SERVER_EXPRESS

목록 보기
7/11

의외로 foreign key가 이론적으로는 쉽지만 실질적으로 활요용하고자 할 때,
복잡한 개념이란 사실을 깨닫게 되었다.

foreign key를 데이터에 설정하는 법에 대해서는 이미 정리했고,
이번에는 실제로 서버에서 물러올 때 어떻게 코드를 작성하면 좋을 지 정리해보고자 한다.
특히나, 이번에 내가 진행하는 프로젝트에서 구현하려는 기능 중 하나가,
foreign key를 2개나 지닌 데이터에서 한꺼번에 데이터를 불러오는 것이기 때분에 더 정리해보고자 한다.

sequelize 공식문서

위의 공식문서를 차근차근 따라가며 테스트 해보았다.

  • 우선 외래키로 연결된 데이터를 가져올 때, id가 같은 경우, 그니까 외래키의 조건을 추가해줘야 하는줄 알았는데, 이미 연결되어 있으므로, 별도로 조건을 주지 않아도 되었다!
    -> 이걸로 계속 서버 에러가 발생하다가 발견한 것이라 잘 기억해 두면 좋을 듯.
reviews
    .findAll({
        where: {
          active: true,
        },
        include: {
          model: users,
          as: 'useremail',
          where: {
            active: true,
          },
          attributes: ['email'],
        },
  • reviews와 users 모델의 관계는 N:1의 관계이다.
    따라서 reviews 내에 users_id 라는 키값이 users의 id값을 받고 있다.
  • 위에서 설명한 바와 같이, 외래키로 연결된 데이터는 별도로 where 조건으르 주지 않아도 연결되어 데이터를 제공한다.
  • 위의 쿼리는 reviews의 모든 데이터를 get하는데, 그 중에, 외래키로 연결된 테이블인 users에서 email 값만 받아오려 한다.
    -> 여기서, reviews와 users 데이터 값이 true인 값만 받아와야 하므로 where 조건에 해당 조건들을 추가한 것이다.

그렇다면 한 테이블 안에 외래키가 2개 이상인 경우는?

내가 구현하고자 하는 데이터는 최종적으로는 두개의 테이블과 외래키로 연결되어 있다.

위의 코드를 활용하여, include 조건을 추가했지만, 2개의 연결된 데이터가 다 받아와지지 않고, 하나만 받아와졌다.
=> 해결책은 간단했다.

include: [
          {
            model: users,
            as: 'useremail',
            where: {
              active: true,
            },
            attributes: ['email'],
          },
          {
            model: bootcamp_list,
            as: 'bootcampname',
            attributes: ['name'],
          },
        ],
  • 위와 같이, include할 테이블이 여러개면, 이 데이터들으르 전체적으로
    배열형태로 묶고, 그 내에서 객체 형태로 조건을 지정하는 것이다.
profile
코드 한 줄로, 세상의 가치를 만들자🌟

0개의 댓글