Search code examples
nestjstypeorm

How to insert an entity with OneToMany relation in NestJS?


There is the description how to do this in typeorm official docs https://typeorm.io/#/many-to-one-one-to-many-relations. But I can't do the same in NestJS with Repository and insert method.

I have written these entities (other columns were omitted)

    @Entity()
    export class News {
      @OneToMany(type => NewsImage, image => image.news)
      public images: NewsImage[];
    }
    
    @Entity()
    export class NewsImage {
      @ManyToOne(type => News, news => news.images)
      public news: News;
    }

I have tried something like this

    function first() {
      const news = new News();
      const image = new NewsImage();
      news.images = [ image ];
      return from(this.newsRepo.insert(news))
        .pipe(
          switchMap(() => this.imageRepo.insert(image)),
        );
    }
    
    function second() {
      const news = new News();
      const image = new NewsImage();
      image.news = news;
      return from(this.imageRepo.insert(image))
        .pipe(
          switchMap(() => this.newsRepo.insert(news)),
        )
    }

It inserts news and image, but image's newsId is null.


Solution

  • Check cascade property

    @Entity()
    export class News {
      @OneToMany(type => NewsImage, image => image.news, { cascade: ['insert', 'update'] })
      public images: NewsImage[];
    }
    

    Then if you do something like

        let news = {
            images: [{
                date: "",
                etc: ""
            }],
            title: ""
        }
    

    If then you call this.repository.save(news) it will save the news and the images. And updates too. Check more docs about this on typeorm docs.