0

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

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

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

怎么做?

仅当我提供单个 id 而不是数组时才有效的架构(lighthouse-php):

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
}
4

1 回答 1

0

而不是这个

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 需要一个数组而不是一个集合。

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

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

于 2021-10-13T19:37:42.747 回答