NodeJS Typeorm不返回生成的数据ID

snvhrwxg  于 2023-05-22  发布在  Node.js
关注(0)|答案(2)|浏览(173)

我使用Typeorm(v8.0.2)和Nestjs(v8)与Nodejs(v16)。我的问题是当我创建一本书时,Typeorm不返回生成的书ID
这里是Book.entity

@Entity()
export class Book {

@PrimaryGeneratedColumn('increment')
id: number;

@Column()
title: string;

@Column()
author: string;
}

这里是book.service

async createBook(createBookDto: CreateBookDto): Promise<Book> {
  const book = await this.bookRepository.create(createBookDto)
  await this.bookRepository.save(createBookDto)
  return book
}

当我使用postman创建一本书时,它会返回

{
   title: "example"
   author: "foo"
}

缺少生成的图书的ID

tmb3ates

tmb3ates1#

TL;DR:返回this.bookRepository.save(createBookDto)的结果,不返回this.bookRepository.create(createBookDto)

从文档:
create-创建User的新示例。可选地接受具有用户属性的对象文字,该用户属性将被写入新创建的用户对象中。

const user = repository.create(); // same as const user = new User();
const user = repository.create({
    id: 1,
    firstName: "Timber",
    lastName: "Saw"
}); // same as const user = new User(); user.firstName = "Timber"; user.lastName = "Saw";

在您的示例中,您使用的是@PrimaryGeneratedColumn()装饰器,它使用数据库级别的自动增量函数。此列的值将在save()方法之后生成,而不是在create()之后生成。

ivqmmu1c

ivqmmu1c2#

在我的例子中,开发人员在实体文件中使用@PrimaryColumn装饰器而不是@PrimaryGeneratedColumn装饰器定义了id,并且nest在save()之后没有返回id
必须是@PrimaryGeneratedColumn。例如,
@PrimaryGeneratedColumn({ name:'id', type:'bigint' }) id !: number

相关问题