使用 typeORM 批量插入/更新的有效方法
Efficient way to bulk insert / update using typeORM
如何使用 TypeORM 将预先创建的对象插入到与对象的关系中?
据我所知,效率低下的是这个(多对多关系):
const tags = await Tag.findByIds(tagIds);
const todo = await Todo.findOne(todoId);
todo.tags = tags;
return await Todo.save(todo)
另外 .add()
属性 of RelationalQueryBuilder
采用单个对象或 Id,如 docs
中所述
await getConnection()
.createQueryBuilder()
.relation(Post, "categories")
.of(1)
.add(3);
那么批量插入的有效方法是什么?
我在使用从 typeGraphql
导入的 @Arg
传递字符串数组时出错,所以我解决了它,因此 typeOrm
的 add()
接受了 Id 数组
所以关系查询的快速和高性能示例是:
import { Resolver, Arg, Mutation } from "type-graphql";
import { Todo } from "../../entity/Todo";
import { createQueryBuilder } from "typeorm";
@Resolver()
export class BulkAssignTagsResolver {
@Mutation(() => Todo)
async bulkAssignTodoTag(
@Arg("tagIds", () => [String]) tagIds: string[],
@Arg("todoId") todoId: string
): Promise<Todo | undefined> {
await createQueryBuilder("todo")
.relation(Todo, "tags")
.of(todoId)
.add(tagIds);
return Todo.findOne(todoId, { relations: ["tags"] });
}
}
如何使用 TypeORM 将预先创建的对象插入到与对象的关系中? 据我所知,效率低下的是这个(多对多关系):
const tags = await Tag.findByIds(tagIds);
const todo = await Todo.findOne(todoId);
todo.tags = tags;
return await Todo.save(todo)
另外 .add()
属性 of RelationalQueryBuilder
采用单个对象或 Id,如 docs
await getConnection()
.createQueryBuilder()
.relation(Post, "categories")
.of(1)
.add(3);
那么批量插入的有效方法是什么?
我在使用从 typeGraphql
导入的 @Arg
传递字符串数组时出错,所以我解决了它,因此 typeOrm
的 add()
接受了 Id 数组
所以关系查询的快速和高性能示例是:
import { Resolver, Arg, Mutation } from "type-graphql";
import { Todo } from "../../entity/Todo";
import { createQueryBuilder } from "typeorm";
@Resolver()
export class BulkAssignTagsResolver {
@Mutation(() => Todo)
async bulkAssignTodoTag(
@Arg("tagIds", () => [String]) tagIds: string[],
@Arg("todoId") todoId: string
): Promise<Todo | undefined> {
await createQueryBuilder("todo")
.relation(Todo, "tags")
.of(todoId)
.add(tagIds);
return Todo.findOne(todoId, { relations: ["tags"] });
}
}