Множественная мутация: как получить ID первой мутации для второй мутации - PullRequest
0 голосов
/ 18 февраля 2020

Проблема

Проблема решена, см. Ниже

Мне нужен идентификатор, созданный с первой мутацией использоваться для второй мутации . В этом случае вторая мутация нуждается в идентификаторе от first для работы.

пример кода:

тип 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 и 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 и OrderRules Mutator аналогичны (back-end)

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

        return $order;
    }

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

Итак, используя пример для объяснения: я бы хотел, чтобы 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
}

Заказ мутатора (удален 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;
    }
}

Это заставило меня работать, но любые дополнительные советы всегда приветствуются!

...