인프런 커뮤니티 질문&답변
sequelize 명령어 관련
작성
·
161
0
강의 듣는 도중에 include 명령에 대해서 궁금증이 생겨서요.
const fullUserWithoutPassword = await User.findOne({
where: { id: req.user.id },
attributes: {
exclude: ['password'],
},
include: [
{ model: Post, attributes: ['id'] },
{ model: User, as: 'Followings', attributes: ['id'] },
{ model: User, as: 'Followers', attributes: ['id'] },
],
});
const posts = await Post.findAll({
limit: 10,
order: [['createAt', 'DESC']],
include: [{ model: User }], // 작성자 정보
});
include 할 때 model: User, Post 혹은 Comment
이런식으로 하여 부가적인 데이터를 같이 불러오는데요. 이게 처음에 models 들을 만들때 associate에서 설정한 관계를 토대로 알아서 시퀄라이즈에서 맞는 정보를 불러와주는거죠?
예를 들면 posts에서 User를 불러오면 post는 user에 1 대 다 관계로 belogsTo 되어있으므로 post에 속해있는 user의 id를 토대로 정보들을 가져온다.
이런식으로요. 이것도 확실하게 하고 싶어 검색 후 여쭤봅니다. 감사합니다.
답변 2
1
제로초(조현영)
지식공유자
네, associate가 제대로 되어있어야만 include로 불러올 수 있습니다. as를 사용하는 경우 include에서도 as 이름이 정확하게 일치해야 합니다.
0
NOAH
질문자
하나만 더 여쭤보겠습니다.
const fullPost = await Post.findOne({
where: { id: post.id },
include: [
{ model: Image },
{ model: Comment },
{ model: User, attributes: ['id', 'nickname'] },
],
이렇게 시퀄라이즈에서 db에 있는 정보를 찾거나 생성을 할때 const fullPost에 넣어주는데요. 그럼 이 의미는 시퀄라이즈에서 db쿼리를 사용 할 때 항상 생성되거나 찾거나 한 데이터들을 객체로 return 해주는건가요?





하나를 찾으면 객체고, 없으면 null입니다. 여러 개를 찾으면 배열로 나옵니다.