0

Problem

Problem solved see below

I would like the ID that is created with the first mutation to be used for by the second mutation. In this the second mutation needs the ID from the first to work.

example code:

type Order and Order_rule (back-end)

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 and CreateOrder_rule Mutation (back-end)

     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 and OrderRules Mutator are similar (back-end)

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

        return $order;
    }

react-apollo

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

So using the example to explain: I would like the order_id which is an auto-incremented primary key, that will be generated from the createOrder mutation, to be used for the createOrder_Rule mutation.

Are there any suggested ways to make this work? I was hoping there is a way to just have multiple mutations in one and just pass the information, but I have red in older answers it wasn't possible (yet). And I tried to make it work, but couldn't yet find a way to do it.

Any tips to make this work are really appreciated! thanks in advance! :)

Problem solved:

Using input and a mutator in the back-end helps solve the problem. Not using the last mutation above anymore. Only using: Example code:

Mutation Order

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

Types

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 types

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 (removed Order_ruleMutator)

Save Order, Add the Order_rule fields to Order and save 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;
    }
}

This made it work for me, but any additional tips are always welcome!

DCCW
  • 195
  • 3
  • 12

1 Answers1

0

Problem solved:

Using input and a mutator in the back-end helps solve the problem. Not using the last mutation above anymore. Only using: Example code:

Mutation Order

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

Types

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 types

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 (removed Order_ruleMutator)

Save Order, Add the Order_rule fields to Order and save 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;
    }
}

This made it work for me, but any additional tips are always welcome!

DCCW
  • 195
  • 3
  • 12