GraphQL,1-1关系突变
GraphQL, 1-1 relation mutation
我正在尝试使用 NodeJS 和 Prisma 实现我自己的 GraphQL 后端。
目前,我只有 2 个简单类型:
用户:
type User {
id: ID! @unique
email: String!
address: Address! @relation(name:"UserAddress")
}
地址:
type Address {
id: ID! @unique
name: String!
user: User! @relation(name:"UserAddress")
}
一个简单的突变,创建一个用户,解决方法是:
async signup(parent, {email}, ctx, info) {
return ctx.db.mutation.createUser({
data: {email},
})
}
但这不起作用,因为在创建用户时,我省略了它的地址。我知道我应该使用该用户的 ID 在数据中添加一个地址字段,但是因为我们正在创建它,所以我们现在无法访问它。如何解决这个问题? (我希望这在服务器中完成,如果可能的话,通过保持 ! 和原子性,否则可以拆分成 2 个突变,如果这是诀窍的话?)。
最佳。
如果您不打算在创建新用户时始终提供地址,我建议您将地址字段设置为可选。否则,无论您采取多少步骤以及执行多快,总是 潜在查询会return 出错的时刻。
TBH,我什至不明白您为什么需要它。我相信你可以不用,或者,如果它真的是强制性的,你应该 "force" 用户填写这些详细信息 when/after 他们注册。但是,请在架构中将其保留为可选。
如果您在注册时询问地址信息,按照我的看法,您可以通过两种方式解决。无论哪种方式,仍然会有一个解析器。是的,您可以根据需要标记 地址 字段
- 如果您将地址与其他用户信息保存在同一个文档中,那么事情就很简单了,您只需在一次查询中将所有内容写入数据库即可。
如果地址和用户 是独立的实体,仍然是一个解析器,但涉及更多步骤,您也可以通过两种方式进行处理:
你保存用户,等待响应得到id
,将user_id
字段添加到地址并保存。保存 address 后,您需要通过添加 address_id
字段来更新 user。
如果您使用的是 mongodb,您绝对没有理由不自己生成这些 ID。使用 new ObjectId()
,将它们添加到需要的地方,然后保存 user 和 address。这样你也可以return一个乐观的反应,或者只是等待两个操作完成。
我正在尝试使用 NodeJS 和 Prisma 实现我自己的 GraphQL 后端。
目前,我只有 2 个简单类型:
用户:
type User {
id: ID! @unique
email: String!
address: Address! @relation(name:"UserAddress")
}
地址:
type Address {
id: ID! @unique
name: String!
user: User! @relation(name:"UserAddress")
}
一个简单的突变,创建一个用户,解决方法是:
async signup(parent, {email}, ctx, info) {
return ctx.db.mutation.createUser({
data: {email},
})
}
但这不起作用,因为在创建用户时,我省略了它的地址。我知道我应该使用该用户的 ID 在数据中添加一个地址字段,但是因为我们正在创建它,所以我们现在无法访问它。如何解决这个问题? (我希望这在服务器中完成,如果可能的话,通过保持 ! 和原子性,否则可以拆分成 2 个突变,如果这是诀窍的话?)。
最佳。
如果您不打算在创建新用户时始终提供地址,我建议您将地址字段设置为可选。否则,无论您采取多少步骤以及执行多快,总是 潜在查询会return 出错的时刻。
TBH,我什至不明白您为什么需要它。我相信你可以不用,或者,如果它真的是强制性的,你应该 "force" 用户填写这些详细信息 when/after 他们注册。但是,请在架构中将其保留为可选。
如果您在注册时询问地址信息,按照我的看法,您可以通过两种方式解决。无论哪种方式,仍然会有一个解析器。是的,您可以根据需要标记 地址 字段
- 如果您将地址与其他用户信息保存在同一个文档中,那么事情就很简单了,您只需在一次查询中将所有内容写入数据库即可。
如果地址和用户 是独立的实体,仍然是一个解析器,但涉及更多步骤,您也可以通过两种方式进行处理:
你保存用户,等待响应得到
id
,将user_id
字段添加到地址并保存。保存 address 后,您需要通过添加address_id
字段来更新 user。如果您使用的是 mongodb,您绝对没有理由不自己生成这些 ID。使用
new ObjectId()
,将它们添加到需要的地方,然后保存 user 和 address。这样你也可以return一个乐观的反应,或者只是等待两个操作完成。