如何在 NestJS 中插入具有 OneToMany 关系的实体?
How to insert an entity with OneToMany relation in NestJS?
在 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
。
声明 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
// ...
}
检查级联 属性
@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 文档上查看更多关于此的文档。
在 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
。
声明 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
// ...
}
检查级联 属性
@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 文档上查看更多关于此的文档。