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 模型进行单元测试?

如何将图像上传到 KeystoneJS GraphQL 端点?

初试Nodejs——使用keystonejs创建博客网站1(安装keystonejs)

使用KeystoneJs的猫鼬两级人口[重复]

Keystonejs:自定义 Keystonejs 默认的 Admin UI 主题

使用 mongoose 全文搜索和 KeystoneJS 分页