-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
Workspaces, Channels, Users 들간의 entity 에서 ManyToMany를 제거하는 방법
23.01.25 00:15 작성 조회수 96
0
nest-typeorm 폴더에서 Workspaces, Channels, Users 들간의 entity 에서 ManyToMany 관계를 제거하고 OneToMany와 ManyToOne관계로 대신하는 코드가 있습니다. ManyToMany관계를 사용하지 않으려면 @ManyToMany 부분을 제거하고 field들만 남겨 놓으면 되나요?
답변을 작성해보세요.
0

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

songkim5787
질문자23.01.26 23:36
@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에 붙혀 주면 될 거 같습니다. 맞나요?

조현영
지공자23.01.26 23:43
저기서 쓰고 있으니까 지우면 에러가 나는 거죠.
워크스페이스멤버에서 쿼리빌더로 하셔도 되고 유저에서 쿼리빌더로 워크스페이스멤버 워크스페이스 순으로 두 번 조인해서 해도 됩니다.
답변 1