728x90
    
    
  의외로 foreign key가 이론적으로는 쉽지만 실질적으로 활요용하고자 할 때, 복잡한 개념이란 사실을 깨닫게 되었다.
foreign key를 데이터에 설정하는 법에 대해서는 이미 정리했고, 이번에는 실제로 서버에서 물러올 때 어떻게 코드를 작성하면 좋을 지 정리해보고자 한다. 특히나, 이번에 내가 진행하는 프로젝트에서 구현하려는 기능 중 하나가, foreign key를 2개나 지닌 데이터에서 한꺼번에 데이터를 불러오는 것이기 때분에 더 정리해보고자 한다.
위의 공식문서를 차근차근 따라가며 테스트 해보았다.
- 우선 외래키로 연결된 데이터를 가져올 때, 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
    
    
  'SW Engineering > BE' 카테고리의 다른 글
| 네이버 검색 api 사용 - 블로그 리뷰 가져오기(python) (0) | 2021.03.20 | 
|---|---|
| sequelize에서 foreign key 설정하기 (1) | 2021.01.12 | 
| sequelize로 DB셋팅할 때, 환경변수 파일 설정 및 사용하기 (0) | 2021.01.12 | 
| 카카오 소셜로그인_OAuth 2.0(python_flask) (5) | 2020.11.27 | 
| 소셜로그인 구현하기(Express.js / github social login) (0) | 2020.11.27 |