在 graphQL 中更新模型,提供要更新的字段和 id 数组

Posted

技术标签:

【中文标题】在 graphQL 中更新模型,提供要更新的字段和 id 数组【英文标题】:update model in graphQL giving fields to update and array of id's 【发布时间】:2021-12-02 00:20:09 【问题描述】:

我有问题。 我想创建查询来更新多个模型上的一些文件, 它应该是这样的:

mutation
    updateInternalOrder( input: 
        state: 
            connect: 1
        
        id_internal_orders: [1,2] <= here
    )
        id_internal_orders
        qty
        state 
            id_internal_orders_states,
            name
        
     

在此查询中,我想分配(更新)id_internal_orders_states(在州内) 在具有 id: 1 和 2 的 id_internal_orders 中。

怎么做?

Schema(lighthouse-php) 仅在我提供单个 id 而不是数组时才有效:

extend type Mutation 
    updateInternalOrder(input: UpdateInternalOrders! @spread): InternalOrders @update


input UpdateInternalOrders 
    id_internal_orders: Int!
    state: InternalOrdersStatesHasOne
    qty: Int
    id_supplier: Int


input InternalOrdersStatesHasOne 
    connect: Int

【问题讨论】:

【参考方案1】:

不是这个

input UpdateInternalOrders 
    id_internal_orders: Int!
    state: InternalOrdersStatesHasOne
    qty: Int
    id_supplier: Int

您的架构应如下所示

input UpdateInternalOrders 
    id_internal_orders: [Int]!
    state: InternalOrdersStatesHasOne
    qty: Int
    id_supplier: Int

所以这样id_internal_orders 将被定义为一个数组

错误Argument 2 passed to Nuwave\\Lighthouse\\Execution\\Arguments\\ArgPartitioner::relationMethods() must be an instance of Illuminate\\Database\\Eloquent\\Model, instance of Illuminate\\Database\\Eloquent\\Collection given的解决方法

您得到的错误是因为您可能正在使用 ORM。传递给突变的数据是一个集合,可能是因为您操作了 ORM 生成的模型。 GraphQL 需要一个数组而不是一个集合。

您必须将集合转换为数组。但这不推荐。如果有一个带有集合的对象集合。您必须转换集合和父集合的每个对象内的所有集合。这会很快变得复杂。

或者您可以找到一种方法,不在前端操作您的模型,而是操作数据传输对象。但是在这里我真的帮不了你,因为我不知道数据来自哪里。

【讨论】:

我试试这个,但不起作用。相反,我有错误:Argument 2 passed to Nuwave\\Lighthouse\\Execution\\Arguments\\ArgPartitioner::relationMethods() must be an instance of Illuminate\\Database\\Eloquent\\Model, instance of Illuminate\\Database\\Eloquent\\Collection given 我进行了编辑以回答您的问题

以上是关于在 graphQL 中更新模型,提供要更新的字段和 id 数组的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL .NET 上部分更新突变的空字段

Sequelize with GraphQl:如何使用突变更新字段

如何更新我的放大 graphql 模型的一部分?

如何在两个字段 prisma-graphql 中使用相同的生成 ID

在 Graphcool / GraphQL 中发布更新突变时如何“更新”数组/嵌套字段?

graphql prisma node js postgresql如何将创建日期/更新字段添加到graphql类型?