• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

Workspaces, Channels, Users 들간의 entity 에서 ManyToMany를 제거하는 방법

23.01.25 00:15 작성 조회수 213

0

nest-typeorm 폴더에서 Workspaces, Channels, Users 들간의 entity 에서 ManyToMany 관계를 제거하고 OneToMany와 ManyToOne관계로 대신하는 코드가 있습니다. ManyToMany관계를 사용하지 않으려면 @ManyToMany 부분을 제거하고 field들만 남겨 놓으면 되나요?

 

답변 1

답변을 작성해보세요.

0

그냥 남겨두고 안 쓰면 됩니다. @ManyToMany를 지운다고 해서 테이블에 존재하는 다대다 관계가 사라지는게 아닙니다. 테이블에는 다대다 관계가 존재하지만 typeorm에서 안 쓸 뿐인 것이죠.

@ManyToMany(...)를 안써도 되는 거라면 지워도 되는 거 아닌가요? 한번 지워봤더니 에러가 납니다. 이 코드를 참고해 주시기 바랍니다.

async deserializeUser(userId: string, done: CallableFunction) {
    return await this.usersRepository
      .findOneOrFail({
        where: { id: +userId },
        select: ['id', 'email', 'nickname'],
        relations: ['Workspaces'],
      })
      .then((user) => {
        console.log('user', user);
        done(null, user);
      })
      .catch((error) => done(error));
  }

다음의 부분에서 문제가 있어 보입니다.

relations: ['Workspaces'],

Users 엔터티에서 Workspaces 릴레이션이 제거되었기 때문에 user.workspaces가

null이 됩니다. 해결책은 WorkspaceMembers 리포지터리에서 쿼리빌더로 로그인 유저가 참여하고 있는 workspace를 찾아서 user에 붙혀 주면 될 거 같습니다. 맞나요?

저기서 쓰고 있으니까 지우면 에러가 나는 거죠.

워크스페이스멤버에서 쿼리빌더로 하셔도 되고 유저에서 쿼리빌더로 워크스페이스멤버 워크스페이스 순으로 두 번 조인해서 해도 됩니다.

두 가지 다해봤는데 잘 됩니다.