2016-12-27 62 views
1

我有一個具有一對多關係的數據庫模式。對於例如一個部門有很多客戶。是否有可能創建一個客戶和一個部門並將其關聯起來?或者正確的方法是創建一個客戶而不是一個部門,然後相互關聯?GraphQL和Graphene

在第二種方法中,我需要做三次而不是一次。 有人可以提供給我一個GraphQL處理這種情況嗎?

回答

1

您可以定義您的突變輸入以支持嵌套類型。這將允許您發送一個突變DepartmentCustomer

在返回有效負載中,您可以在查詢中指定返回新創建的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) 

您將允許您在一次旅行中進行變異和查詢關聯實體。

enter image description here

事情變得有點複雜,如果你正在使用Connections定義關係,但基本原理是一樣的。