多重突变:如何使第一个突变将ID传递给第二个突变

时间:2020-02-18 10:50:42

标签: variables graphql parameter-passing react-apollo graphql-mutation

问题

问题已解决,请参见下文

我希望由第一个突变创建的ID用于 第二次突变。在这种情况下,第二种变异需要第一个中的ID才能起作用。

示例代码:

键入Order和Order_rule(后端)

type Order {
    order_id: ID!
    site_id: ID
    user_id: ID
    customer_name: String
    site: Site! @belongsTo
    order_rules: [Order_rule!]
}

type Order_rule {
    order_rule_id: ID!
    order_id: ID
    photo_id: ID
    product_id: ID
    site_id: ID
    order: Order! @belongsTo
}

CreateOrder和CreateOrder_rule突变(后端)

     createOrder(
     site_id: ID!,
     user_id: ID!,
     customer_name: String!,
     ): Order @field(resolver: "OrderMutator@create")

createOrder_rule(    
    order_id: ID!
    foto_id: ID
    product_id: ID
    site_id: ID
    ): Order_rule @field(resolver: "Order_ruleMutator@create")

Order和OrderRules Mutator相似(后端)

    public function create($rootValue, array $args, GraphQLContext $context)
    {
        $order = new \App\Order($args);
        $order->save();

        return $order;
    }

反应阿波罗

mutation createOrderAndOrderRules(
  $site_id: ID!
  $user_id: ID!
  $customer_name: String!
    $order_id: ID!
    $photo_id: ID,
    $product_id: ID,
)
{createOrder(
  site_id: $site_id
  user_id: $user_id
  customer_name: $customer_name
) 
{
order_id
}
 createOrder_rule(
   order_id: $order_id
   photo_id: $photo_id
    product_id: $product_id
    site_id: $site_id
   ) {
    order_id
    photo_id
    product_id
    site_id
     }
}

因此,使用示例进行解释:我想要order_id,它是一个自动递增的主键, 将由 createOrder 突变产生的,用于 createOrder_Rule 突变。

有什么建议的方法可以使这项工作吗?我希望有一种方法可以拥有多个 一个突变,只是传递信息,但是我在较旧的答案中有红色的字样(目前)是不可能的。 我试图使其工作,但仍找不到解决方法。

任何使这项工作有效的技巧都非常感谢!提前致谢! :)

问题已解决:

在后端使用输入和增幅器有助于解决问题。 不再使用上面的最后一个突变。仅使用: 示例代码:

突变顺序

   createOrder(
    input: OrderInput! @spread
    ): Order @field(resolver: "OrderMutator@create")

类型

type Order {
    order_id: ID!
    site_id: ID
    user_id: ID
    customer_name: String
    site: Site! @belongsTo
    order_rules: [Order_rule!]
}

type Order_rule {
    order_rule_id: ID!
    order_id: ID
    photo_id: ID
    product_id: ID
    site_id: ID
    order: Order! @belongsTo
}

输入类型

input OrderInput {
    order_id: ID!
    site_id: ID
    user_id: ID
    customer_name: String
    order_rules: [InputOrder_rule]
}

input InputOrder_rule {
    photo_id: ID
    product_id: ID
    site_id: ID
    order_id: ID
}

Mutator订单(已删除Order_ruleMutator)

保存订单,将Order_rule字段添加到Order中并保存Order_rule。

use App\Order;
use App\Order_rule;

class OrderMutator
{
    public function create($rootValue, array $args, GraphQLContext $context)
    {

        $order = new \App\Order($args);
        $order->save();

        foreach($args['order_rules'] as $orderRules)
        {
            $data_array = 
            array(
            'order_id' => $order->id,
            'site_id' => $orderRules['site_id'],
            'photo_id' => $orderRules['photo_id'],
            'product_id' => $orderRules['product_id'],
            );

            $orderRule = new \App\Order_rule($data_array);
            $orderRule->save();            

        }
        return $order;
    }
}

这使它对我有用,但是随时欢迎其他提示!

1 个答案:

答案 0 :(得分:0)

问题已解决:

在后端使用输入和增幅器有助于解决问题。 不再使用上面的最后一个突变。仅使用: 示例代码:

突变顺序

   createOrder(
    input: OrderInput! @spread
    ): Order @field(resolver: "OrderMutator@create")

类型

type Order {
    order_id: ID!
    site_id: ID
    user_id: ID
    customer_name: String
    site: Site! @belongsTo
    order_rules: [Order_rule!]
}

type Order_rule {
    order_rule_id: ID!
    order_id: ID
    photo_id: ID
    product_id: ID
    site_id: ID
    order: Order! @belongsTo
}

输入类型

input OrderInput {
    order_id: ID!
    site_id: ID
    user_id: ID
    customer_name: String
    order_rules: [InputOrder_rule]
}

input InputOrder_rule {
    photo_id: ID
    product_id: ID
    site_id: ID
    order_id: ID
}

Mutator订单(已删除Order_ruleMutator)

保存订单,将Order_rule字段添加到Order中并保存Order_rule。

use App\Order;
use App\Order_rule;

class OrderMutator
{
    public function create($rootValue, array $args, GraphQLContext $context)
    {
 
        $order = new \App\Order($args);
        $order->save();
    
        foreach($args['order_rules'] as $orderRules)
        {
            $data_array = 
            array(
            'order_id' => $order->id,
            'site_id' => $orderRules['site_id'],
            'photo_id' => $orderRules['photo_id'],
            'product_id' => $orderRules['product_id'],
            );

            $orderRule = new \App\Order_rule($data_array);
            $orderRule->save();            

        }
        return $order;
    }
}

这使它对我有用,但是随时欢迎其他提示!