KeystoneJS 关系,如何使用 id 数组进行连接
Posted
技术标签:
【中文标题】KeystoneJS 关系,如何使用 id 数组进行连接【英文标题】:KeystoneJS relationships, how can I connect using an array of ids 【发布时间】:2021-06-19 01:41:21 【问题描述】:我正在使用新版本的 Keystone Next,我正在尝试使用一组 id 一次连接多个项目。似乎 connect 支持这一点,接受一个对象数组。
const FINISH_VOCABULARY_QUIZ_MUTATION = gql`
mutation FINISH_VOCABULARY_QUIZ_MUTATION(
$userId: ID!
$wordId: ID!
)
updateUser(id: $userId, data:
wrongAnswers:
connect: [id: "idblabla", id: "idblabla2"]
)
id
`;
但我似乎无法弄清楚如何将这个 id 数组作为变量传递给我的突变。 我知道我需要创建一个新类型?该文档仍未完成,因此还没有任何内容。 我也尝试过使用字符串插值来形成我的查询,但它似乎不是 GraphQl 中的东西。
【问题讨论】:
只需传递userId
和整个 data
对象 - $data:someMutationInputType
从 API 文档/规范中读取
【参考方案1】:
这更像是一个 GraphQL 问题,而不是 KeystoneJS,但是要在这里找到正确的方向,您需要将查询更改为如下所示:
const FINISH_VOCABULARY_QUIZ_MUTATION = gql`
mutation FINISH_VOCABULARY_QUIZ_MUTATION(
$userId: ID!,
$ids: [UserWhereUniqueInput!]!
)
updateUser(id: $userId, data:
wrongAnswers:
connect: $ids
)
id
`;
然后将您的 id 数组映射到具有 id 字段的对象数组。
【讨论】:
感谢您的回答!我最终发现我可以将数组作为变量传递,只需将其包裹在 $wordsIdWrong 之类的括号中:[WordWhereUniqueInput]【参考方案2】:有一个更好的方法:
const FINISH_VOCABULARY_QUIZ_MUTATION = gql`
mutation FINISH_VOCABULARY_QUIZ_MUTATION(
$userId: ID!,
$data: SomeAPIDefinedMutationUniqueInput
)
updateUser(id: $userId, data: $data)
id
`;
这样你:
不必为内部参数定义类型 ($wordsIdWrong: [WordWhereUniqueInput]
);
可以重用/共享此突变 - 从一些常见的查询中导入它,放置 (dir) - 只需使用不同的 data
变量调用它即可;
更易于阅读/维护;
PS。老实说,应该有一些特定的 [to quizes] 突变(不要使用 userUpdate
),在 SomeAPIDefinedUniqueInput
中定义用户(或更好的测验)id
。
【讨论】:
这确实是我可以做的,但这意味着定义一个新类型。至于userUpdate,我需要将数据直接存储在用户身上,如果不需要,我不想提出额外的请求。 但是很高兴知道,我会在更多地研究 GraphQL 之后尝试一下。 不是 graphql 问题——你总是可以在用户类型下使用一些quizes
字段来连接其他表/类型(所有 graphql 都是关于关系的)......更多的是关于数据库设计......配置文件可以严格控制在用户之下,但在类型级别限制/处理请求数量是过早的优化 ...测验应该是一个单独的类型,接下来可能会尝试(您可以多次使用相同的测验?) ...并且使用graphql,您可以对所有这些读取使用一个请求 - 没关系 - 所有类型都应该单独管理(突变) - 嵌套突变是有问题的以上是关于KeystoneJS 关系,如何使用 id 数组进行连接的主要内容,如果未能解决你的问题,请参考以下文章
如何将图像上传到 KeystoneJS GraphQL 端点?
初试Nodejs——使用keystonejs创建博客网站1(安装keystonejs)