提问人:Thiago Dias 提问时间:11/13/2023 更新时间:11/13/2023 访问量:18
NestJs 在给定 id 的情况下创建关系
NestJs create relation given the id
问:
我有 2 个实体:和 .一篇文章由一个用户创建,但一个用户可以创建多篇文章。它们各自的实体定义如下:User
Article
export class Article {
id?: string; // Optional to allow db to generate id
// ...
user?: User;
}
export class User {
id?: string;
username: string;
password: string;
}
我已按照 NestJs 文档将实体与其模式分开。
应具有与 相关的列。这是在架构的一部分中定义的。我没有指定列,只在关系中指定。Article
userId
User
relations
userId
export const ArticleSchema = new EntitySchema<Article>({
name: 'Article',
target: Article,
tableName: 'Article',
columns: {
id: {
type: String,
primary: true,
generated: 'uuid',
},
// ...
},
relations: {
user: {
type: 'many-to-one',
target: 'User',
nullable: false,
joinColumn: {
name: 'userId',
},
},
},
});
在我的控制器中,我收到一个:CreateArticleDto
export class CreateArticleDto {
// ...
@IsUUID()
userId: string;
}
我知道默认情况下,TypeORM 会在我们指定关系并传递 ,在我的情况下是 .但是,在我的控制器中,我只能访问 .我想创建一个而无需搜索实体。relatedEntityId
entity
user: User
userId
Article
User
目前,我必须创建一个空用户(仅具有 id)将其传递给服务,然后使用该用户搜索该用户并将其保存在 Article 中,以便将 Article 保存到数据库中:id
控制器
const article: Article = {
...createArticleDto,
user: {
id: createArticleDto.userId,
username: '',
password: '',
},
};
const result = await this.articleService.create(article);
服务
async create(article: Article) {
const user = await this.userService.getById(article.user.id);
article.user = user;
const result = await this.articleRepository.create(article);
return result;
}
有没有更好的方法?理想情况下,仅使用 userId 创建新文章。
答:
评论