【问题标题】:How to mutate list of objects in lighthouse GraphQL如何在灯塔 GraphQL 中改变对象列表
【发布时间】:2021-10-29 00:27:28
【问题描述】:

我有架构:

input CreateProduct {
    id_product: Int
    content: CreateContentHasMany
    manufacturer: CreateManufacturerHasOne
    codes: ProductCodesInput
}
type Mutation {
    createProduct(product: CreateProduct! @spread): Product @create
    createProducts(products: [CreateProduct!]): [Product]! @create
}

我的查询:

mutation {
    createProducts(
        products: [
            {
                content: {
                    create: [
                        {name: "some name"}
                    ]
                }
                codes: {
                    reference: "AAA666"
                }
            }
        ]
    ){
        id_product
    }
}

创作单品作品, 但是当我尝试创建产品列表时出现错误:

Array to string conversion.

我做错了什么?

【问题讨论】:

    标签: graphql laravel-lighthouse


    【解决方案1】:

    @create 指令仅用于创建单个条目。
    您可以创建自定义 mutator 来处理批量创建。

    使用 artisan 命令创建自定义 mutator: php artisan lighthouse:mutation createProducts

    由于mutator与mutator类同名,所以会自动使用。
    如果您使用不同的名称创建它,您可以使用@fielddirective 来解决它。

    input CreateProduct {
        id_product: Int
        content: CreateContentHasMany
        manufacturer: CreateManufacturerHasOne
        codes: ProductCodesInput
    }
    type Mutation {
        createProduct(product: CreateProduct! @spread): Product @create
        createProducts(products: [CreateProduct!]): [Product]!
    }
    

    此代码未经测试,仅供参考! :)

    <?php
    
    namespace App\GraphQL\Mutations;
    
    class CreateProducts
    {
        /**
         * @param  null  $_
         * @param  array<string, mixed>  $args
         */
        public function __invoke($_, array $args)
        {
            // unsafe batch insert. Take care of relations!
            return Product::insert($args['products']);
    
            // loop and create
            $products = [];
            foreach ($args['products'] as $productData) {
                // Create product. Take care of relations!
                Product::create($productData);
                // to
                $product = new Product();
                $product->fill($productData);
                // do whatever before saving. E.g. solve and set relations
                $product->save();
                $products[] = $product;
            }
            return $products;
    
        }
    }
    
    

    【讨论】:

      猜你喜欢
      • 2017-04-24
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 2018-07-09
      • 2021-11-20
      • 1970-01-01
      相关资源
      最近更新 更多