1
我有一個具有一對多關係的數據庫模式。對於例如一個部門有很多客戶。是否有可能創建一個客戶和一個部門並將其關聯起來?或者正確的方法是創建一個客戶而不是一個部門,然後相互關聯?GraphQL和Graphene
在第二種方法中,我需要做三次而不是一次。 有人可以提供給我一個GraphQL處理這種情況嗎?
我有一個具有一對多關係的數據庫模式。對於例如一個部門有很多客戶。是否有可能創建一個客戶和一個部門並將其關聯起來?或者正確的方法是創建一個客戶而不是一個部門,然後相互關聯?GraphQL和Graphene
在第二種方法中,我需要做三次而不是一次。 有人可以提供給我一個GraphQL處理這種情況嗎?
您可以定義您的突變輸入以支持嵌套類型。這將允許您發送一個突變Department
和Customer
。
在返回有效負載中,您可以在查詢中指定返回新創建的Department
及其關聯的Customer
。
class Customer(graphene.ObjectType):
customer_id = graphene.Int(required=True)
name = graphene.String(required=True)
class Department(graphene.ObjectType):
department_id = graphene.Int(required=True)
name = graphene.String(required=True)
customers = graphene.List(Customer)
class CustomerInput(graphene.InputObjectType):
name = graphene.String(required=True)
class DepartmentMutation(graphene.relay.ClientIDMutation):
class Input:
name = graphene.String(required=True)
customer = graphene.Field(CustomerInput)
department = graphene.Field(Department)
@classmethod
def mutate_and_get_payload(cls, input, context, info):
new_department_name = input.get('name')
new_customer = input.get('customer')
logger.debug(new_department_name)
logger.debug(new_customer)
# validate and persist...
# we return dummy objects for brevity
customer = Customer(
customer_id=1,
name=new_customer.get('name')
)
department = Department(
department_id=1,
name=new_department_name,
customers=[customer]
)
return cls(department=department)
您將允許您在一次旅行中進行變異和查詢關聯實體。
事情變得有點複雜,如果你正在使用Connections
定義關係,但基本原理是一樣的。