더북(TheBook)

7.6.4.1 관계 쿼리

findOne이나 findAll 메서드를 호출할 때 프로미스의 결과로 모델을 반환합니다(findAll은 모두 찾는 것이므로 모델의 배열을 반환합니다).

const user = await User.findOne({});
console.log(user.nick); // 사용자 닉네임

User 모델의 정보에도 바로 접근할 수 있지만, 더 편리한 점은 관계 쿼리를 지원한다는 것입니다. MySQL로 따지면 JOIN 기능입니다. 현재 User 모델은 Comment 모델과 hasMany-belongsTo 관계가 맺어져 있습니다. 만약 특정 사용자를 가져오면서 그 사람의 댓글까지 모두 가져오고 싶다면 include 속성을 사용합니다.

const user = await User.findOne({
  include: [{
    model: Comment,
  }]
});
console.log(user.Comments); // 사용자 댓글

어떤 모델과 관계가 있는지를 include 배열에 넣어주면 됩니다. 배열인 이유는 다양한 모델과 관계가 있을 수 있기 때문입니다. 댓글은 여러 개일 수 있으므로(hasMany) user.Comments로 접근 가능합니다. 또는 다음과 같이 댓글에 접근할 수도 있습니다.

const user = await User.findOne({});
const comments = await user.getComments();
console.log(comments); // 사용자 댓글
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.