Хасура: Как установить связь sh с существующей записью (многие ко многим) во время вставки?
У меня есть две таблицы: продукт и категория, которые связаны друг с другом отношениями многие ко многим на основе столбца id в каждой таблице и промежуточной таблицы product_category.
Я могу вставлять записи непосредственно в postgres для обеих таблиц и связывать их с product_category, и это отлично работает в Hasura для запросов, поэтому я знаю, что у меня есть настроить все правильно.
Что я хочу сделать, так это вставить новый продукт и зная идентификатор категории (или категорий), я хочу установить sh связь во время вставки. Желательно без отдельного вызова
https://hasura.io/docs/1.0/graphql/manual/mutations/insert.html#insert -an-object-with-its-related-objects-through-Relations
В документации рассматривается только вставка обоих объект и связанные объекты одновременно, но что, если другой уже существует?
Я пробовал то, что я ожидал бы работать (привязка этого продукта к категории с идентификатором 1):
mutation MyMutation {
insert_product_one(
object: {
name: "Champion",
category: {data: {id: 1}}
}) {
id
}
}
Но это вызывает:
«Нарушение Not-NULL. Значение null в столбце \" product_id \ "нарушает ограничение not-null»
Как я могу вставить этот новый продукт и связать его в одну или несколько категорий? Желательно все в одном операторе, но даже пример получения сгенерированного идентификатора и мутации обновления не был бы идеальным, но, тем не менее, решение.
Обновление: в качестве проверки работоспособности я воссоздал продукт и таблицы категорий в качестве минимального, базового c примера и попробовал как мой запрос, так и метод конфликта upsert, предложенный xadm.
Данные и отношения, которые я добавил здесь:
https://imgur.com/a/GUomMbe
mutation MyMutation {
insert_testproduct_one(
object: {
name: "Champion",
category: {
data: {id: 1},
on_conflict: { constraint: primarykeything , update_columns: [id] }
}
}) {
id
}
}
Ошибка аналогична: «Нарушение Not-NULL. Значение null в столбце \" testcategory_id \ "нарушает ограничение not-NULL»
Примечание: primarykeything - это первичный ключ в таблице моста, состоящий из двух идентификаторов.