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 설정하기 (0) | 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 |