sequelize 관계 qeury

Vorhandenheit ·2022년 3월 30일
0

JS/Node 

목록 보기
37/63

Seqeulize 관계 query

프로젝트 진행 중에, 모델에서 관계 쿼리를 설정하는 부분에 대해서는 자세히 나와있었는데, 이 모델에 데이터를 등록하는 것에 대해 자료가 별로 없어서 정리해보았습니다.

먼저 user와 following 을 1대 다 관계로 설정했습니다.한 유저가 여러 명의 following을 가질 수 있는 겁니다.

DB diagram은 이렇게 될 겁니다.

이럴 경우 sequelize 모델 설정입니다.

여기까지는 문제 없이 할 수 있었는데, 이제는 테이블을 만들었으니, api가 주소가 갈대마다 이 테이블에 데이터를 조회하고 넣는게 문제 였습니다.

(1) 데이터 조회

데이터를 조회하기 위해서는 findOne이나 findAll을 사용할 것입니다. 하지만 지금 저희가 조회해야할 내용은 user 테이블에서 follwing과 관계설정이 되어있는 user를 찾는 것입니다.
이럴 경우 include을 사용해서 이를 해결할 수 있습니다.

const { user } = require('../models')
user.findOne({
	include : { model : following, where : { name : req.body.name } }
})

(2) 데이터 추가

위에 까지는 어찌저찌 이해할 수 있었지만 문제는 그다음, 데이터를 가지고 올 수 는 있었지만 이제는 데이터베이스에 테이블에 맞춰서 데이터를 추가하여야 했습니다.

첫 시도는 위와 같은 방식으로 했지만, 당연히 되지않았습니다. 알고보니 수정, 생성, 삭제는 sequelize관계 쿼리는 다른 방식으로 해야됬습니다.

const user = await user.findOne({ where : {name : req.body.name}})
const following = await following.create({ following : req.body.name, user_id : req.body.id})
await user.addFollowing(following);

처음에 이 코드를 보고, addFollowing이 뭘까...나는 저런걸 선언한적이 없는데 갑자기 저런게 왜 등장할까 싶었습니다. 알고봤더니 모델에서 관계를 설정했다면 동사 뒤에 모델의 이름이 붙는 형식의 메서드를 지원한다고 합니다.( 원리는..찾아봐도 안나오네요)
위에 메서드 말고도 다른 메서드도 있습니다.

get(테이블이름) : 조회
set(테이블이름) : 수정
add(테이블이름) : 하나 생성
add(테이블이름)s : 여러 개 생성
remove(테이블이름) : 삭제

출처

https://velog.io/@delay100/Sequelizewith-MySQL-2

profile
읽고 기록하고 고민하고 사용하고 개발하자!

0개의 댓글