nestjs

Relation 옵션 모음

Relation Options

모든 관계가 같은 옵션을 사용한다.

아래는 일단 OneToOne에 대한 예시

@OneToOne(() => ProfileModel, (profile) => profile.user, {
	eager: true,
})
  • eager (T/F) : find() 실행 할때마다 항상 같이 가져올 것들 결정. true로 할 경우에 아래 부분에 해당하는 relations 를 직접 적어주지 않아도 됨.

      @Get('users')
      getUsers() {
        return this.userRepository.find({
          relations: {
            profile: true,
            posts: true,
          },
        });
      }
    
  • cascade (T/F) : relation 을 한 번에 같이 저장할지 말지를 결정

  • nullable (T/F) : 기본 값은 True.

  • onDelete : 관계가 삭제됐을때

    • ‘NO ACITON’: 아무것도 안함
    • ‘CASCADE’ : 참조하는 Row도 같이 삭제
    • ‘SET NULL’ : 참조하는 Row 에서 참조 id를 null로 변경
    • ’SET DEFAULT’ : 기본 세팅으로 설정
    • ‘RESTRICT’: 참조하고 있는 Row가 있는 경우 참조당하는 Row 삭제 불가

Find Options

  @Get('tags')
  getTags() {
    return this.tagRepository.find({
	    select: {
		    id: true,
		    createAt: true,
		    updatedAt: true,
		    version: true
	    },
	    // AND 조건
	    where: {
		    version: 1
	    },
	    // OR 조건
	    where: [
		    {
			    id: 3
		    },
		    {
			    id: Not(1)
		    }
	    ],
	    order: {
		    id: 'ASC'
	    },
	    skip: 1,
	    take: 3
    });
  }
  • select : select 는 MySQL의 SELECT와 같은 것을 의미한다. 가져올 것들을 정하는데, select 옵션을 사용하는 순간 선택하지 않은 모든 칼럼은 가져오지 않는다.
  • where : 필터링을 할 때 사용. 여러 개의 값을 넣을 경우 AND 조건으로 가져온다고 보면 된다. 만약 OR 조건으로 가져오고 싶다면 배열 형태로 가져오면 된다.
  • relations : 관계를 가져오는 건데, 위에서 사용한 것 그대로다. 특이한 점은, 여기서 호출한 경우 select나 where에서도 호출이 가능하다는 것이다.
  • order : 오름차순(ASC), 내린차순(DESC)
  • skip : 처음 몇 개를 제외할지 결정
  • take : 몇 개를 가져올지. 처음부터 몇 개를 가져올지 결정
  • Not(1) : 1이 아닌 경우 가져오기
  • LessThan(30) : 30보다 작은 경우 가져오기
  • MoreThan(30) : 30보다 큰 경우 가져오기
  • Equal(30) : 30과 같은 경우 가져오기
  • Like(’%abc%’) : abc가 중간에 들어가는 문자 가져오기
  • ILike(’%aBc%’) : 소문자 대문자 구분 안하고 Like 수행
  • Between(10, 15) : 10과 15 사이의 값
  • In([1, 3, 5, 7]) : 배열 내부에 해당하는 것들을 모두 가져옴
  • IsNull() : Null인 경우 가져옴