[TIL] 230720

김주희·2023년 7월 20일
0

내배캠 10주차 TIL

목록 보기
4/5

▶️ separate: true

const petSitterData = await this.petSitterInfoRepository.findOnePetSitter(
        {
          where: { id },
          include: [
            {
              as: 'petSitterUserInfo',
              model: Users,
              attributes: ['name'],
            },
            {
              separate: true,
              as: 'petSitterReservationInfo',
              model: Reservations,
              attributes: ['startDate', 'endDate'],
              where: {
                [Op.or]: [
                  {
                    startDate: {
                      [Op.between]: [
                        canStartReservationDate,
                        canEndReservationDate,
                      ],
                    },
                  },
                  {
                    endDate: {
                      [Op.between]: [
                        canStartReservationDate,
                        canEndReservationDate,
                      ],
                    },
                  },
                ],
              },
            },
          ],
        },
      );

...

const petSitter = {
        name: petSitterData.petSitterUserInfo.name,
        petSitterId: petSitterData.id,
        homeType: petSitterData.homeType,
        summaryTitle: petSitterData.summaryTitle,
        summary: petSitterData.summary,
        introduction: petSitterData.introduction,
        address: petSitterData.address,
        image: petSitterData.image,
        price: petSitterData.price,
        career,
        reservation: petSitterData.petSitterReservationInfo,
      };
  • 지금 이 코드에서 include를 두번하는데, 첫번째는 유저 테이블에서 펫시터의 이름, 두번째는 예약 테이블에서 예약 현황 쿼리이다. 이때, 예약 현황이 없다면 null 값이 되어버려 petSitterData가 선언되지 않는다.
  • include 별로 쿼리를 따로 날리고 싶다면 'separate: true'로 해두면 된다! 예약된 상황이 아니라면 reservation이 빈 배열로 반환된다.
profile
꾸준히 하자

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

너무 좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기