如何在NestJS中插入具有OneToMany关系的实体?

问题描述 投票:1回答:2

有关如何在typeorm官方文档https://typeorm.io/#/many-to-one-one-to-many-relations中执行此操作的说明。但我不能在使用Repositoryinsert方法的NestJS中做同样的事情。

我写了这些实体(其他列被省略)

@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;
}

我尝试过这样的事情

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)),
    )
}

它插入新闻和图像,但图像的newsIdnull

nestjs typeorm
2个回答
1
投票

声明new News()会创建一个新实体,但不会将其保存到数据库中。你首先需要insert.save() news对象,然后将其添加到image

async function first() {
  // you can .save() it however you want, the point is it must be saved to the db
  const news = await News.create({ title: 'Async rules the world' }).save()
  const image = new NewsImage()
  image.news = news // now news has an id from the database
  // ...
}

2
投票

检查级联属性

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

然后,如果你做的事情

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

如果那时你打电话给this.repository.save(news)它将保存新闻和图像。还有更新。在typeorm docs上查看更多有关此内容的文档。

© www.soinside.com 2019 - 2024. All rights reserved.