[英]Is there a way to access options for multiple graphql mutations with @apollo/react-hooks
[英]GraphQL and Apollo - Multiple Mutations
我正在开发一个使用 Auth0、Hasura/PostgreSQL、GraphQL 和 Apollo 的 React 应用程序,我很环保,所以我显然需要一些帮助。 以下是我想要实现的目标:
用户提交表单以创建新团队。 该记录已添加到“团队”表中,现在我需要返回该 ID,以便我可以在“团队人员”表中创建一行。
表结构:
import gql from "graphql-tag"; const insertTeam = gql ` mutation ($name: String!, $gender: String!, $birth_year: Int!, $created_by: String!) { insert_teams(objects: {name: $name, gender: $gender, birth_year: $birth_year, created_by: $created_by}) { affected_rows returning { id name gender birth_year created_by } } } `; export default insertTeam;
我可以向数据库添加一个新团队,但我需要帮助从新创建的团队获取 Id,以便我可以在“teamstaff”表中创建初始记录。 另外,有没有更好的方法来构建我的表格? 每个用户可以分配到多个团队,每个团队的角色也不同。
我不确定您是如何执行此更改的,但我假设您正在使用 Apollo 的Mutation Component 。 这是如何获取最近添加的记录的 ID 的示例:
import React from "react";
import gql from "graphql-tag";
import { Mutation } from "react-apollo";
const INSERT_TEAM = gql `
mutation InsertTeam($name: String!, $gender: String!, $birthYear: Int!, $createdBy: String!) {
insertTeam(objects: {name: $name, gender: $gender, birthYear: $birthYear, createdBy: $createdBy}) {
affectedRows
returning {
id
name
gender
birthYear
createdBy
}
}
}
`;
const onInsertTeamCompleted = ({ insertTeam }) => {
console.log(insertTeam.returning.id); // Here you have your ID
}
const Screen = () => (
<Mutation mutation={INSERT_TEAM} onCompleted={onInsertTeamCompleted}>
{(insertTeam, { data }) => { // Through data, you can also access data.insertTeam results.
const onInserTeam = () => {
insertTeam({ variables: {name: "Mary", gender: "Female", birthYear: 1990} });
};
return (
<button onClick={onInserTeam}>Insert demo team</button>
);
})}
</Mutation>
)
export default Screen;
您可能已经注意到,我已更新您的查询以遵循属性的命名约定(是的,使用驼峰命名法),但此更改对最终结果没有影响。
如果你还没有读过它,Apollo 文档中的Mutation Component 部分讨论了很多重要的事情,比如更新缓存和处理错误,所以它是必读的! 😉
我知道这个问题很老,但 Hasura 会为你处理这个问题(此时)。 您只需要提供与 User_Id 字段的关系的一侧
mutation($name: String!, $gender: String!, $birth_year: Int!, $created_by: String, $user_id: String!) {
insert_teams(
objects: {
TeamStaff: {
data: {
User_Id: $user_id
}
},
name: $name,
gender: $gender,
birth_year: $birth_year,
created_by: $created_by }
) {
affected_rows
returning {
id
name
gender
birth_year
created_by
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.