• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

관계 쿼리를 정확히 알고싶습니다.

22.05.26 23:44 작성 조회수 96

0

 
const user = await User.findOne({});
const comments = await user.getComments();
console.log(comments);

책에 나와있는 예제입니다.

여기서 user.getComments();  이부분에서

getComments() 이게 조회하는 메서드라는 것은 이해했습니다.

User과 관계를 맺은 모델인 Comment모델에서 조회하는 것이겠지요.

문제는 그 앞에있는 user. 이 무슨 역할인지 모르겠습니다.

const user = await User.findOne({}); 조건에 맞는 객체를 조회했다는 것은 이해했지만

그것과 getComments() 가 무슨 상관관계가 있는것인가요?

또 그외의         

await post.addHashatgs(result.map(r => r[0]));

이 코드는 9장 노드버드의 게시글 업로드 라우터의 일부분입니다

이 코드에선 add메서드를 사용했는데

result.map(r => r[0]) 를 Hashtag모델에 추가하는 것은 알겠지만

MySQL로 hashtags 테이블을 조회해보면 

해당 데이터가 없습니다.

이 데이터는

 return Hashtag.findOrCreate({
where: { title: tag.slice(1).toLowerCase() },
})

여기서 생성되었습니다.

혹시 Post와 Hashtag가 다대다 관계이니 중간테이블에 저장했나 싶어 posthashtag를 조회해봐도

해당 데이터가 없습니다.

그렇다면 add, remove, set메서드를 사용했을 때 데이터는 어디에 저장되는 것인가요?

 

시퀄라이저 공식문서도 훝어봤지만 제가 원하는 정보가 안나와서 질문합니다.

 

답변 1

답변을 작성해보세요.

0

user.getComments에서 user는 방금 조회한 사용자죠. 사용자의 댓글들을 가져와라라는 뜻입니다. 앞에 user.이 없으면 누구의 댓글을 가져오나요?

posthashtag 테이블에 태그 정보들이 들어있는 겁니다. postId랑 hashtagId가 연결되어 있잖아요.

wdhgood123님의 프로필

wdhgood123

질문자

2022.05.27

태그 정보가 외래키안에 들어있는 것인가요?

await post.addHashatgs(result.map(r => r[0]));

이 문장이 posthashtag모델의 조건에 맞는 post의 hashtagId안에 해당 데이터가 추가된다고 이해해도 되나요?

 

 

또한 관계메서드는 as를 쓰지 않으면 모델 명을 쓰는데 그렇다면 post.addposthashtag가 되어야 하는 것이 아닌가요?

중간 테이블에 postId와 hastagId가 저장되는 겁니다. n:m 관계라서 바로 addHashtag라고 하면 됩니다. 중간 테이블로 접근할 필요 없습니다.

n:m 관계는 주종관계나 선후관계가 없습니다. 둘이 평등하게 중간 테이블에서 연결됩니다.