[TIL] Not found alias 오류 23.08.21

이상훈·2023년 8월 21일
0

[내일배움캠프]

목록 보기
55/68

작업을 진행하던 중 Not found alias 오류가 발생

Error: Cannot find alias for relation at workspace
    at UpdateQueryBuilder.findColumnsForPropertyPath (C:\Users\dltkd\OneDrive\바탕 화면\개발 공부\workflow-service\src\query-builder\QueryBuilder.ts:1305:27)
    at UpdateQueryBuilder.getPredicates (C:\Users\dltkd\OneDrive\바탕 화면\개발 공부\workflow-service\src\query-builder\QueryBuilder.ts:1454:26)
    at getPredicates.next (<anonymous>)
    at UpdateQueryBuilder.getWhereCondition (C:\Users\dltkd\OneDrive\바탕 화면\개발 공부\workflow-service\src\query-builder\QueryBuilder.ts:1621:50)
    at UpdateQueryBuilder.where (C:\Users\dltkd\OneDrive\바탕 화면\개발 공부\workflow-service\src\query-builder\UpdateQueryBuilder.ts:224:32)
    at EntityManager.update (C:\Users\dltkd\OneDrive\바탕 화면\개발 공부\workflow-service\src\entity-manager\EntityManager.ts:790:18)
    at Repository.update (C:\Users\dltkd\OneDrive\바탕 화면\개발 공부\workflow-service\src\repository\Repository.ts:361:29)
    at MembershipsService.extensionMembership (C:\Users\dltkd\OneDrive\바탕 화면\개발 공부\workflow-service\src\memberships\memberships.service.ts:63:37)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at C:\Users\dltkd\OneDrive\바탕 화면\개발 공부\workflow-service\src\payments\payments.service.ts:64:9

해결방법

  • OneToOne으로 관계 설정 시 FK를 관리하지 않는 테이블에서는 참조하는 테이블의 id값 컬럼이 생성되지 않는 것을 확인 (이유는 튜터님에게 확인해봐야 할 듯)
 // 멤버십 연장
  async extensionMembership(body: MembershipDto, workspaceId: number): Promise<IResult> {
    const targetMembership = await this.membershipRepository.findOne({ where: { workspace: { id: workspaceId } } });
    const servicePeriod = body.servicePeriod * 24 * 60 * 60 * 1000;
    const newEndDate = new Date(targetMembership.end_date.getTime() + servicePeriod);

    if (!targetMembership) throw new HttpException('결제된 멤버십이 없습니다.', HttpStatus.NOT_FOUND);

    await this.membershipRepository.update({ workspace: { id: workspaceId } }, { end_date: newEndDate });
    
    return { result: true };
  }
  • 따라서 기존처럼 update를 사용할 경우 해당 오류가 발생하는 것으로 판단
  • update를 save로 바꾸어서 사용
// 멤버십 연장
  async extensionMembership(body: MembershipDto, workspaceId: number): Promise<IResult> {
    const targetMembership = await this.membershipRepository.findOne({ where: { workspace: { id: workspaceId } } });
    const servicePeriod = body.servicePeriod * 24 * 60 * 60 * 1000;
    const newEndDate = new Date(targetMembership.end_date.getTime() + servicePeriod);

    if (!targetMembership) throw new HttpException('결제된 멤버십이 없습니다.', HttpStatus.NOT_FOUND);

    await this.membershipRepository.save({ ...targetMembership, end_date: newEndDate });
    return { result: true };
  }
profile
코린이

0개의 댓글