- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 graphql 服务器和一个 role
表,我想在一个突变中保存多个角色。
我搜索了很多,但一无所获。
我该如何做:
mutation {
addRoles (roles: [
{
name: "role1",
description: "role 1"
},
{
name: "role2",
description: "role 2"
},
...
])
}
也就是说,如何实现addRoles
和updateRoles
解析器?
for 循环是唯一的选择吗?是否可以在一次数据库调用中保存所有角色?
角色
模型:
@Entity("role")
@ObjectType()
export class Role extends BaseEntity {
@Field((type) => Number)
@PrimaryGeneratedColumn()
readonly id!: number;
@Field()
@Column({ length: 64 })
name!: string;
@Field({ nullable: true })
@Column({ length: 512, nullable: true })
description!: string;
}
并添加和更新解析器:
@Resolver((of) => Role)
export class RoleResolver {
@Mutation((returns) => Boolean)
async addRole(
@Arg("role") role: AddRoleInput
): Promise<Boolean> {
const roleExists = await Role.count({ name: role.name });
if (roleExists > 0)
throw new Error(`Role with name "${role.name}" already exists!`);
const newRole = Role.create(role);
await newRole.save();
return true;
}
@Mutation((returns) => Boolean)
async updateRole(
@Arg("role") role: UpdateRoleInput
): Promise<Boolean> {
const oldRole = await Role.findOneOrFail(role.id);
Object.assign(oldRole, role);
await oldRole.save();
return true;
}
}
以及AddRoleInput
和UpdateRoleInput
@InputType({ description: "New Role Argument" })
export class AddRoleInput implements Partial<Role> {
@Field()
name!: string;
@Field({ nullable: true })
description?: string;
}
@InputType({ description: "Update Role Argument" })
export class UpdateRoleInput implements Partial<Role> {
@Field()
id!: number;
@Field()
name!: string;
@Field({ nullable: true })
description?: string;
}
最佳答案
我通过反复试验找到了答案。如果有人遇到同样的问题,我会在这里发布:
@Resolver((of) => Role)
export class RoleResolver {
@Mutation((returns) => Boolean)
async addRoles(
@Arg("roles", type => [AddRoleInput]) roles: AddRoleInput[]
): Promise<Boolean> {
// also checks at front
const roleExists = await Role.count({
name: In(roles.map((role) => role.name)),
});
if (roleExists > 0)
throw new Error(`Role name conflict!`);
const newRoles = []
for (let i=0, i < roles.length, i++) {
const newRole = Role.create(roles[i]);
newRoles.push(newRole);
}
// this is the solution
// turns out an entity class can be used to save instances
// failed to found this in the docs though
await Role.save(newRoles);
return true;
}
...
}
如果有更好的答案,我会保持悬赏。
关于graphql - Typegraphql+TypeORM : save/update an array of entities,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64205541/
我要更新firstName和 lastName的 profile实体。 我希望用户能够更新它们两者或仅更新其中之一。 然而我不知道如何进行突变,使得其中一个参数( firstName 和 lastNa
我想知道如何在 type-graphql 中使用 RESTDataSource 并因此在 redis 中正确缓存。我会很感激一个小例子。 目前我使用 DI 容器来获取一个服务,该服务是从 RestDa
我想在 TypeGraphQL 中创建用户和文档之间的简单关系。因此,用户可以创建无限的文档,而一个文档只有一个创建者。但我收到一个错误。 用户 import { Entity, PrimaryGen
当我从事 graphql 项目时,我喜欢 type-graphql方式:使用类和装饰器来创建 GraphQL 模式。 但现在我遇到了一个问题:我们需要使用一些从另一个包定义的 GraphQL 模式。他
我有一个 graphql 服务器和一个 role 表,我想在一个突变中保存多个角色。 我搜索了很多,但一无所获。 我该如何做: mutation { addRoles (roles: [
经过一天的工作,我终于能够让 TypeQL 与 Netlify Functions/AWS Lambda 一起工作,查看文档和示例,最后绝望的蛮力。 我在这里为其他人分享我的工作代码(或供我自己将来引
我是一名优秀的程序员,十分优秀!