[sequelize] 새로 알게 된 것들 정리

codeing999·2022년 8월 23일
0

CRUD BACKEND 구현

목록 보기
10/10
  1. migration을 안쓰고도 모델만으로도 테이블을 만들 수 있다고한다. 너무 충격적이다. 내가 배운 건 그거밖에 없어서 당연히 migration으로 테이블 만드는 줄 알았는데 이거 겁나 어려워서 이거 안쓰고 모델만 썼으면 시간을 너무 아꼈을 것 같다.

  2. 그 외에도 오늘 알게 된 것들이 대부분 이 사이트에 잘 정리되어있다. 그동안 검색할 땐 이런거 안나오다가 왜 알게 되고 나니까 이런 사이트가 나와주는 건지 야속하다.
    https://lgphone.tistory.com/86

대충 어떤 것들이냐면,
get모델명? 이런 함수들이 자동으로 생성되어서 그런 것으로 쿼리 쓸 수 도 있단 거랑.

as를 통해서 이름을 지정하면 함수 이름도 그걸로 바뀐다는 거.
근데 as는 다른 것을 위해서도 필요한데, 두 테이블 사이에 참조 관계가 두 개있을 때 include를 쓸 때, 둘 중 어떤 참조 관계를 통해 인클루드 한것인지 명시할 때에도 필요하다.

const people = await LikeAndDislike.findAll({
        where: { userId, isLike: true },
        attributes: [],
        include: [
          {
            model: User,
            as: "objectUser",
          },
        ],
      });

A라는 사용자가 좋아하는 대상인 유저들의 유저 정보들을 가져오는 함수.

저 두 테이블에는 as로 각각 서브젝트, 오브젝트라고 명명한 두 관계가 있는데 저기 as에다가 내가 subject를 썼다면,
좋아하는 당사자인 자기 정보만이 리턴 되었을 것이다.

Executing (default): SELECT `LikeAndDislike`.`likeId`, `objectUser`.`userId` AS `objectUser.userId`, `objectUser`.`email` AS `objectUser.email`, `objectUser`.`password` AS `objectUser.password`, `objectUser`.`nickname` AS `objectUser.nickname`, `objectUser`.`age` AS `objectUser.age`, `objectUser`.`address` AS `objectUser.address`, `objectUser`.`gender` AS `objectUser.gender`, `objectUser`.`imageUrl` AS `objectUser.imageUrl`, `objectUser`.`interest` AS `objectUser.interest`, `objectUser`.`x` AS `objectUser.x`, `objectUser`.`y` AS `objectUser.y`, `objectUser`.`createdAt` AS `objectUser.createdAt`, `objectUser`.`updatedAt` AS `objectUser.updatedAt` FROM `LikeAndDislikes` AS `LikeAndDislike` LEFT OUTER JOIN `Users` AS `objectUser` ON `LikeAndDislike`.`targetUserId` = `objectUser`.`userId` WHERE `LikeAndDislike`.`userId` = '2' AND `LikeAndDislike`.`isLike` = true;

로그에 이렇게 남는데 필요없는 것들 일단 생략해서 단축 시켜보면

SELECT * 
FROM `Users` AS `User` WHERE `User`.`userId` = 1;

SELECT * 
FROM `LikeAndDislikes` AS `LikeAndDislike` 
LEFT OUTER JOIN `Users` AS `objectUser` 
ON `LikeAndDislike`.`targetUserId` = `objectUser`.`userId` 
WHERE `LikeAndDislike`.`userId` = '2' AND `LikeAndDislike`.`isLike` = true;

ON이란 것도 알게됐는데 이건 조인을 실행하기 전에 붙는 조건이라고 한다.
WHERE은 조인 실행 후에 붙는 조건.
일단 정확한 개념은 아님.

profile
코딩 공부 ing..

1개의 댓글

comment-user-thumbnail
2022년 8월 23일
답글 달기