인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

Full Stack 개발자님의 프로필 이미지

작성한 질문수

[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core

Many To Many 궁금점

해결된 질문

작성

·

64

0

  1. 아래 처럼 Post 또는 Tag 테이블에 값이 들어가면서 post_model_tags_tag_model 테이블에 값이 반영이 되는데요

  2. 실무에서는 실질적으로 Post 또는 Tag 테이블이 기존에 가지고 있던 값을 활용해서 post_model_tags_tag_model 테이블이 업데이트 되는 경우가 많은데요

  3. 즉, Post_1 이라는 Post 테이블의 값에 Tag_1만 적용되어 있었는데 추후에 Tag_2를 하려면 어떻게 해야하나요? 무조건 Post 테이블에 값을 삽입하면서 post_model_tags_tag_model 테이블에 값을 넣어줘야 하나요?

     

@Post('posts/tags')
  async createPostTags() {
    //post_model 테이블에 삽입
    const post1 = await this.postRepository.save({
      title: 'NestJs Lecture',
    });

    // post_model 테이블에 삽입
    const post2 = await this.postRepository.save({
      title: 'Programming Lecture',
    });

    // post_model_tags_tag_model 테이블에 삽입
    const tag1 = await this.tagRepository.save({
      name: 'javascript',
      posts: [post1, post2],
    });

    // post_model_tags_tag_model 테이블에 삽입
    const tag2 = await this.tagRepository.save({
      name: 'typescript',
      posts: [post1],
    });

    // post_model_tags_tag_model 테이블에 삽입
    const post3 = await this.postRepository.save({
      title: 'NestJs Lecture',
      tags: [tag1, tag2],
    });

    return true;
  }

답변 2

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

Many to Many Relation에 관계를 추가하는 방법에 대한 질문으로 해석했는데 맞을까요?

아래와 같이 추가하고 싶은 관계만 넣어줄 수 있습니다.

await dataSource

.createQueryBuilder()

.relation(Post, "categories")

.of(post)

.add(category)

링크 레퍼런스 드립니다.

https://orkhan.gitbook.io/typeorm/docs/relational-query-builder

감사합니다!

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다.

Full Stack 개발자님의 질문은 실무에서 Many-to-Many 관계를 효율적으로 업데이트하는 방법에 대한 것입니다. 특히, 이미 존재하는 PostTag 관계를 추가로 업데이트하는 방법에 대한 부분이 궁금하신 것 같습니다.

TypeORM을 활용하여 Many-to-Many 관계를 설정할 때, 두 테이블(예: PostTag) 간의 중간 테이블(post_model_tags_tag_model)을 통해 관계가 관리됩니다. 기존에 존재하는 Post 테이블의 특정 데이터에 새로운 태그를 추가하고 싶은 경우, 아래와 같은 방법으로 처리할 수 있습니다:

  1. 먼저 추가하려는 태그 객체를 로드하거나 생성합니다.
  2. 업데이트할 포스트 객체를 로드합니다.
  3. 포스트 객체의 tags 필드에 새로운 태그를 추가합니다.
  4. 변경된 포스트 객체를 저장(save)하여 중간 테이블도 함께 업데이트되도록 합니다.

아래는 코드 예시입니다:

async addTagToPost(postId: number, newTag: Tag) {
  // postId를 통해 기존 포스트 로드
  const post = await this.postRepository.findOne({
    where: { id: postId },
    relations: ['tags'], // 기존에 연결된 태그들도 함께 로드
  });

  if (post) {
    // 태그 추가
    post.tags.push(newTag);

    // 변경된 포스트 저장
    await this.postRepository.save(post);

    return true;
  }
  return false;
}

이와 같이, 이미 존재하는 Post 객체에 Tag를 추가하면 TypeORM이 자동으로 중간 테이블을 업데이트하여 PostTag 간의 관계가 갱신됩니다.

유사한 상황을 다룬 질문들을 통해 더 많은 예시와 답변을 확인할 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.