인프런 커뮤니티 질문&답변

김태준님의 프로필 이미지

작성한 질문수

Node.js 교과서 - 기본부터 프로젝트 실습까지

해시태그 검색 & 팔로잉 구현 & 마무리

관계정의시 관계되어있지 않은 로우조회가 궁금합니다.

작성

·

192

0

만약 제가 좋아요하지않은 게시물만 보고싶다면,

일단 모든게시물을 찾아놓고, 제가 좋아요한 게시물을 다시 찾은다음에 공통사항을 제거하는 방법밖에없나요??

구글링을 하는데 원하는 답변을 찾을 수가없어서 질문드립니다 ㅠㅠ.

답변 2

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

include 옵션에서 where을 줄 수 있습니다.

include: [{
  model: db.User,
  as: 'Liker',
  where: { LikerId: { [Sequelize.Op.ne]: req.user.id } },
}]

이런 식으로요. 정확한 코드는 아닙니다. 컬럼명이나 as는 직접 바꾸세요.

시퀄라이즈 쿼리를 짜기 힘드시다면 먼저 SQL 쿼리로 먼저 짜보는 연습을 하시는 것도 좋습니다.

0

김태준님의 프로필 이미지
김태준
질문자

아 혹시 through테이블에 관계가 명시되어있지않으면 그것을 아예 인지하지못하나요??

const myPost = await User.findOne({
      where: { id: req.user.id },
      include: [
        {
          model: Post,
          through: { where: { userId: req.user.id } }
        }
      ]
   }); 이 경우에는 관계가명시되어있는 user와 post의 관계에 따라 include되었지만
const otherPost = await User.findOne({
      where: { id: req.user.id },
      include: [
        {
          model: Post,
          through: { where: { userId: { [Op.ne]: req.user.id } } }
        }
      ]
   }); 밑의 경우 아예 빈배열이 나와버리는데 이 연산이 through 테이블을 기반으로 벌어지기 때문에
관계가 없음을 알아채지못하는건가요??
말을 너무 두서없이 hrough테이블에 관계가 명시되어있지않으면 그것을 아예 인지하지못하나요??
const myPost = await User.findOne({
where: { id: req.user.id },
include: [
{
model: Post,
through: { where: { userId: req.user.id } }
}
]
}); 이 경우에는 관계가명시되어있는 user와 post의 관계에 따라 include되었지만
const otherPost = await User.findOne({
where: { id: req.user.id },
include: [
{
model: Post,
through: { where: { userId: { [Op.ne]: req.user.id } } }
}
]
}); 밑의 경우 아예 빈배열이 나와버리는데 이 연산이 through 테이블을 기반으로 벌어지기 때문에
관계가 없음을 알아채지못하는건가요??
말을 너무 두서없이 썼는데 저의 질문을 요약하자면 이렇습니다.
첫번째 식은 제가 좋아요한 게시물만을 출력하는 코드를 의도한것이고
두번째 식은 제가 좋아요 하지않은 게시물을 출력하기 위한 코드입니다.
through식은 through테이블만을 기준으로 해당 문장을 찾기 때문에
제가 의도했던 전체 게시물 중 내가 좋아요를 누르지않은 게시물만 보여줘! 가 동작하지않는것이맞나요?
만약 제가 제 의도대로 코드를 작성하려면 through가 아닌 다른방법을 사용해야하나요?
긴 질문 읽어주셔서 감사합니다..