ИМХО вы можете искать «вложенные мутации» - здесь не описано, вы легко найдете примеры / учебники.
Предлагаемая структура БД (отношение n-к-n):
order{orderID,lines[{orderLineID}] } >
order_line{orderLineID, productID, anount, price} >
product {productID}
... созданный с вложенными мутациями (в обратном порядке product> line_line> order)
Продукту не нужно orderID
, но когда вы запрашиваете его [в решателе продуктов]
query product(id) {
id
orderedRecently {
orderID
date
price
}
}
... вы можете просто получить его (или, скорее, множество массивов) из таблиц orderLines
и orders
[используя простой запрос SQL - где price
будет считан из orderLines
]
orderedRecently
распознаватель может получить продукт id
из родительского объекта (обычно 1-й параметр)
Конечно, вы можете (и должны) возвращать данные в виде order
и orderLine
типов (в кешируется отдельно, нормализуется):
query product($id: ID!) {
product(id: $id) {
id
orderedRecently {
id
date
orderLine {
id
amount
price
}
}
}
}
где тип orderedRecently: [Order!]
- массив может быть пустым, еще не упорядочен
update
Я немного неправильно понял ваши требования (присвоение имен соглашение) ... у вас уже есть правильная структура БД. Мутацию можно «подавать» со сложными данными / вводом:
mutation {
createOrder(input: {
order: {
ordername: "My order"
products: [
{
quantity: 3
idrefproduct: 25
},
{
quantity: 5
idrefproduct: 28
}
]
}
}) {
order {
id
ordername
products {
id
idrefproduct
quantity
}
}
}
}
Ваш product
- это мой orderLine
, idrefproduct
- product
.
createOrder
создает / вставляет order
и затем использует его id
для создания записей продукта (order.id
, idrefproduct
и quantity
). Resolver может возвращать только заказ id
или структурированные данные (как указано выше).