如何在不使用 queryBuilder 的情况下更新 table 上的许多字段?

How to update many fields on a table without using queryBuilder?

我想更新 table“Returns”的许多字段,此方法将接收一个整数数组,表示 Return 寄存器的 ID 和要更新的值这注册

Ej: ( [1,2,3,4], "新值" )

通常我使用这种查询

await this.returnRepository.update(id, { shipment_id:'SomeValue' })

问题是,在这种特殊情况下,我需要更新许多 ID,如果我使用该语法提供 ID 数组,则不起作用

为了解决这个问题,我使用带有此代码的 querybuilder

await this.returnRepository.createQueryBuilder()
                .update(ReturnEntity).set({ shipment_id: shipmentId })
                .where("return_id IN(:...id)", { id: returnIds })
                .execute()

问题:

1.- 我知道第二种查询形式的名称是 QUERY BUILDER,第一种形式的名称是什么?我试图搜索 'typeorm query' 但没有给我太多相关信息。

2.-是否可以将此查询生成器转换为第一个选项?会怎样?

谢谢!

您可以使用 typeorm

提供的 In 运算符
import { In } from 'typeorm';

await this.returnRepository.update(
    { id: In([1, 2, 3, 4]) },
    { shipment_id:'SomeValue' }
)
  1. 来自 Repository 的 TypeORM 文档:

Repository is just like EntityManager but its operations are limited to a concrete entity.

基本上,save()insert()update()delete() 等功能由存储库 class 提供,让您轻松 access/update实体。 当您使用存储库时,功能仅限于存储库实体。

存储库与查询生成器:

简而言之,QueryBuilder API 为您提供了一系列强大的方法,可用于创建高级 SQL 查询,而 Repository API 使您可以访问更易于使用的基本功能。

  1. 是的,可以将您的 QueryBuilder 更新查询转换为存储库查询。

为此,您可以使用 TypeORM 提供的 In 运算符。 您可以这样做:

import { In } from 'typeorm';

await this.returnRepository.update(
    {id: In([1, 2, 3, 4])},
    {shipment_id:'SomeValue'}
);

此处,In 运算符已从 typeorm 导入并采用值数组。 当你 运行 这个时,它会生成一个 SQL 像这样的查询(部分):

SET "shipment_id" = 'SomeValue' WHERE "id" IN (1,2,3,4)

它属于高级选项。您可以阅读有关 TypeORM advanced options here.

的更多信息

我希望这能回答你的问题。

外部链接: