Хасура: Как установить связь с существующей записью (многие ко многим) во время вставки?
У меня есть две таблицы: продукт и категория, которые связаны друг с другом отношениями «многие ко многим» на основе столбца идентификатора в каждой таблице и промежуточной таблицы product_category.
Я могу вставлять записи непосредственно в postgres для обеих таблиц и связывать их с product_category, и это отлично работает в Hasura для запросов, поэтому я знаю, что все настроил правильно.
Что я хочу сделать, так это вставить новый продукт и зная идентификатор категории (или категорий), я хочу установить связь во время вставки. Желательно без отдельного звонка
В документации описывается только одновременная вставка объекта и связанных объектов, но что, если другой уже существует?
Я пробовал то, что ожидал бы сработать (привязка этого продукта к категории с идентификатором 1):
mutation MyMutation {
insert_product_one(
object: {
name: "Champion",
category: {data: {id: 1}}
}) {
id
}
}
Но это бросает:
«Нарушение Not-NULL. Значение null в столбце \" product_id \ "нарушает ограничение not-NULL»
Как я могу вставить этот новый продукт и связать его с одной или несколькими категориями? Желательно все в одном операторе, но даже пример получения сгенерированного идентификатора и обновления мутации был бы не идеальным, но тем не менее решением.
Обновление: в качестве проверки работоспособности я воссоздал таблицы продуктов и категорий в качестве минимального, базового примера и попробовал как свой запрос, так и предложенный xadm метод конфликта upsert.
Данные и отношения, которые я добавил здесь:
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 - это первичный ключ в таблице моста, состоящий из двух идентификаторов.
on_conflict
- person xadm   schedule 29.05.2020