angular - 使用 Prisma 和 Apollo 调用多个 GraphQL 突变的正确方法是什么
问题描述
我有以下数据库模型
type GlobalUser {
email: String
createdAt: DateTime!
updatedAt: DateTime!
}
type Client {
global_user: GlobalUser!
createdAt: DateTime!
updatedAt: DateTime!
}
每次创建 GlobalUser 时,我都想在 client 表中创建一个 Client。如果我选择使用 Apollo 从应用程序的 Angular 客户端执行此操作,这可能是我使用 Promises 调用一个又一个突变的方法。
document = gql`
mutation createGlobalUser(
$email: String!, $password: String!
) {
createGlobalUser(
email: $email, password: $password,
) {
email
}
}
`;
createGlobalUserService.mutate({
email: email
}).toPromise().then((res) => {
createClientService.mutate({
global_user: res.data.id
}).catch(err => {
console.log(err);
});
我没有找到从服务器端的 Prisma 解析器中执行此操作的方法
const Mutation = {
async createGlobalUser(root, args, context) {
const user = await context.prisma.createGlobalUser({
...args
});
return {
id
email
}
}
有没有一种方法可以在 Angular 中使用 Apollo 从客户端组合和执行多个突变?还是在服务器端做更好?
解决方案
如果您将客户端添加为与数据模型的关系,如下所示:
type GlobalUser {
email: String
createdAt: DateTime!
updatedAt: DateTime!
client: Client! @relation(name: "UserClient")
}
type Client {
global_user: GlobalUser! @relation(name: "UserClient")
createdAt: DateTime!
updatedAt: DateTime!
}
您可以在来自前端的一个请求中使用 prisma 客户端创建客户端。例如:
document = gql`
mutation createGlobalUser(
$email: String!, $password: String!
) {
createGlobalUser(
data: {
email: $email
password: $password
client: {
create: { ... }
}
) {
email
}
}
`;
推荐阅读
- python - 字节和字节串是一回事吗?
- python - DataFrame 仅使用 BeautifulSoup 打印 XML 的最后一行
- python - 将 DOCX 字节流转换为 PDF 字节流 Python
- javascript - 如何使用 css 降低文本选择背景的高度?
- javascript - 如何通过资源ID获取元素?
- typescript - for 循环中的 Promise 数组 - 第二次迭代时为空
- flutter - 棘手的堆栈或列以颤振布局之间的空间为中心
- c - 在 STM32 上使用 DMA 复制 16 位数据
- git - kivy pip install 失败,说不是 git 存储库
- android - 如何设置在 backstack 上检查的底部导航项?