在 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 数组的主要内容,如果未能解决你的问题,请参考以下文章
Sequelize with GraphQl:如何使用突变更新字段
如何在两个字段 prisma-graphql 中使用相同的生成 ID