Upsert Graphql Mutation с ограничением конфликта для вложенного объекта

Я пытаюсь сделать апсерт в единственной мутации. Здесь у меня есть две таблицы Users table [id, isVerified, type] и Customers table [id, name, deviceToken] Здесь Customers.id - это внешний ключ Users.Id.
Ниже приводится мутация:

 MyMutation {
  insert_Users(objects: [{isVerified: false, name: "+9100000000", type: "customer", 
    Customers: {data: {deviceToken: "TestToken001"}}}],
      on_conflict: {
            constraint: Users_name_key,
            update_columns: [isVerified]
          }) {
    affected_rows
    returning {
      Customers{
        deviceToken
      }
  }
}
} ```

//But when I run this, I get the exception 

{
  "errors": [
    {
      "extensions": {
        "path": "$.selectionSet.insert_Users.args.objects[0].Customers.data",
        "code": "constraint-violation"
      },
      "message": "Uniqueness violation. duplicate key value violates unique constraint \"Customers_pkey\""
    }
  ]
}

Похоже, это связано с тем, что я не устанавливаю ограничение конфликта для вложенного объекта Customers. Как добавить ограничение конфликта для вложенного объекта?


person regShank    schedule 16.07.2020    source источник


Ответы (1)


Вам также необходимо добавить объект ограничения во вложенные данные. Что-то вроде:

MyMutation {
  insert_Users(objects: [{isVerified: false, name: "+9100000000", type: "customer", 
    Customers: {
       data: {deviceToken: "TestToken001"}, 
       on_conflict: {
            constraint: Customers_pkey,
            update_columns: [deviceToken]
          }         
     }}],
      on_conflict: {
            constraint: Users_name_key,
            update_columns: [isVerified]
          }) {
    affected_rows
    returning {
      Customers{
        deviceToken
      }
  }
}
} 
person Leonardo Alves    schedule 16.07.2020