Как вставить объект с отношением OneToMany в NestJS? - PullRequest
0 голосов
/ 03 марта 2019

Существует описание, как это сделать в официальных документах typeorm https://typeorm.io/#/many-to-one-one-to-many-relations. Но я не могу сделать то же самое в NestJS с Repository и insert методом.

Я написалэти объекты (другие столбцы были опущены)

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

Он вставляет новости и изображения, но изображение newsId равно null.

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Проверьте свойство каскада

@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.

0 голосов
/ 03 марта 2019

Объявление 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
  // ...
}
...