使用 typeorm 和 Nest js 更新 postgresQl 表

发布于 2025-01-10 02:50:49 字数 778 浏览 0 评论 0原文

我正在使用 Nest js 创建 API。当用户注册时,我使用这个实体

@Entity('user')
export class UserEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  email: string;

  @Column()
  password: string;

  @Column({ default: false })
  isActive: boolean;
}

之后,使用我创建的另一个端点,我想在此表中添加一个新字段,例如:code

const updateUser = await this.usersRepository.update(email, {
  code: 'code example',
});

...但我得到 TS2345: Argument of type '{ code: any; }' 不可分配给类型为“QueryDeepPartialEntity”的参数。
为什么我会收到此错误以及如何解决添加新字段 code 的问题?

I am using nest js to create API. When user is registered i use this entity

@Entity('user')
export class UserEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  email: string;

  @Column()
  password: string;

  @Column({ default: false })
  isActive: boolean;
}

After that using another endpoint that was created by me i want to add a new field in this table, like: code

const updateUser = await this.usersRepository.update(email, {
  code: 'code example',
});

... but i get TS2345: Argument of type '{ code: any; }' is not assignable to parameter of type 'QueryDeepPartialEntity<UserEntity>'..
Why i get this error and how to solve the issue adding a new field code?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

离鸿 2025-01-17 02:50:49

this.usersRepository.update 正在尝试将 {code: 'code example',} 类型转换为 UserEntity,但失败为 code< /code> 不是 UserEntity 类中定义的属性。

在 TypeORM 中,可以通过以下两种方式之一来修复此问题:

1。在 createConnection 中使用 synchronize:true ,如下所示:

export const databaseProviders = [
  {
    provide: 'DATABASE_CONNECTION',
    useFactory: async () => await createConnection({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: 'root',
      database: 'test',
      entities: [
          __dirname + '/../**/*.entity{.ts,.js}',
      ],
      synchronize: true,
    }),
  },
];

并将 [1] : 添加

@Column()
code:string

UserEntity

2. Alter command on db

在 SQL DB 上运行更改查询,并在 user 表中添加一列代码。
另外,如上面 [1] 中所述,在您的 UserEntity 中添加代码列。

无论如何,您必须从修复 UserEntity 对象开始。

this.usersRepository.update is trying to typecast {code: 'code example',} as UserEntity and is failing as code is not an attribute defined in UserEntity class.

In TypeORM this can be fixed in either of the 2 ways:

1. Using synchronize:true in your createConnection as in :

export const databaseProviders = [
  {
    provide: 'DATABASE_CONNECTION',
    useFactory: async () => await createConnection({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: 'root',
      database: 'test',
      entities: [
          __dirname + '/../**/*.entity{.ts,.js}',
      ],
      synchronize: true,
    }),
  },
];

And add [1] :

@Column()
code:string

to UserEntity

2. Alter command on db

Run an alter query on your SQL DB and add a column of code in the user table.
Also, add code column in your UserEntity as mentioned in [1] above.

Anyways you have to start by fixing the UserEntity Object.

把时间冻结 2025-01-17 02:50:49

您可以使用 typeorm queryRunner.addColumn为此目的。

示例:

import { getConnection, TableColumn } from "typeorm";

const connection = getConnection();

await connection.createQueryRunner().addColumn(
  "tablename",
  new TableColumn({
    name: "code",
    type: "varchar",
  })
);

// OR With TypeOrm Repository

this.usersRepository.queryRunner.addColumn(
  "tablename",
  new TableColumn({
    name: "code",
    type: "varchar",
  })
);

此外,您还可以使用 queryRunner 中的许多其他功能(如下面的功能)来帮助您。

  • hasTable
  • hasColumn
  • renameTable
  • renameColumn
  • changeColumn
  • ...许多其他此处

You can use typeorm queryRunner.addColumn for this purpose.

Example:

import { getConnection, TableColumn } from "typeorm";

const connection = getConnection();

await connection.createQueryRunner().addColumn(
  "tablename",
  new TableColumn({
    name: "code",
    type: "varchar",
  })
);

// OR With TypeOrm Repository

this.usersRepository.queryRunner.addColumn(
  "tablename",
  new TableColumn({
    name: "code",
    type: "varchar",
  })
);

Additionally, you can also many other functions from queryRunner like bellow ones which can help you.

  • hasTable
  • hasColumn
  • renameTable
  • renameColumn
  • changeColumn
  • ... many others here.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文