728x90

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

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

 

sequelize 공식문서

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
include: [
          {
            model: users,
            as'useremail',
            where: {
              active: true,
            },
            attributes: ['email'],
          },
          {
            model: bootcamp_list,
            as'bootcampname',
            attributes: ['name'],
          },
        ],
cs

 

728x90

+ Recent posts