Как сделать несколько соединений в одной мутации GQL?

Итак, в моей модели данных Prisma есть следующее. Между играми и персонажами существует связь, когда персонажи могут появляться в нескольких играх. Также персонажи должны иметь возможность быть перечислены в играх, когда запрашиваются только игры:

type Game {
  id: ID! @unique
  name: String! @unique
  name_ja: String @unique
  name_ko: String @unique
  name_zh_CN: String @unique
  name_zh_TW: String @unique
  name_zh_HK: String @unique
  characters: [Character]
  filters: [GameFilter]
}

type Character {
  id: ID! @unique
  name: String! @unique
  name_ja: String @unique
  name_ko: String @unique
  name_zh_CN: String @unique
  name_zh_TW: String @unique
  name_zh_HK: String @unique
  games: [Game]
}

Затем у меня есть это как мутация для обновления символов в моей схеме. Я передаю массив идентификаторов игр, потому что существует возможность добавления нескольких игр в одну и ту же мутацию:

updateCharacter(
        name: String
        name_ja: String
        name_ko: String
        name_zh_CN: String
        name_zh_HK: String
        name_zh_TW: String
        id: ID!
        games: [ID]
    ): Character!

И следующая мутация написана:

async updateCharacter(parent, args, ctx, info) {
        if (!ctx.request.userId) {
            throw new Error('You must be logged in');
        }

        const updates = {...args};

        delete updates.id;
        delete updates.games;

        console.info(args.games);

        const res = await ctx.db.mutation.updateCharacter({
            data: updates,
            games: {
                connect: {
                    id: args.games
                }
            },
            where: {
                id: args.id
            }
        }, info);
        return res;
    }

И следующая мутация написана React-стороной. Он предназначен для передачи массива идентификаторов в мутацию (что ожидается, поскольку схема предполагает, что будет передан массив идентификаторов:

const UPDATE_CHARACTER_MUTATION = gql`
    mutation UPDATE_CHARACTER_MUTATION(
        $name: String!
        $name_ja: String!
        $name_ko: String!
        $name_zh_CN: String!
        $name_zh_TW: String!
        $name_zh_HK: String!
        $id: ID!
        $games: [ID]!
    ) {
        updateCharacter(
            name: $name
            name_ja: $name_ja
            name_ko: $name_ko
            name_zh_CN: $name_zh_CN
            name_zh_TW: $name_zh_TW
            name_zh_HK: $name_zh_HK
            games: $games
            id: $id
        ) {
            id
            name
            name_ja
            name_ko
            name_zh_CN
            name_zh_TW
            name_zh_HK
            games {
                id
                name
            }
        }
    }
`;

Я также передаю идентификаторы игр в массиве onSubmit в форме для мутации.

В результате мутация проходит, но обновит только поля имени, а связь с Играми останется неизменной.

Не уверен, что я могу сделать, чтобы это мутировало должным образом. Я не уверен, является ли передача массива непосредственно в мутацию в соединении причиной проблемы, но я попытался сопоставить и передать каждый идентификатор игры по отдельности, но получил тот же результат: соединение не обновлялось.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
753
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема кажется двоякой.

По поводу отсутствия каких-либо изменений:

В написанной мутации games добавляется к асинхронному запросу json вне data, что означает, что данные никогда не будут найдены запросом. Скорее, чем:

data: ...,
games: ...

games должен быть частью таких данных:

data: {
  games: ...
}

Что касается желания сделать несколько подключений:

GraphQL поддерживает этот стиль вложенных обновлений, используя следующий синтаксис соединения:

connect: [
  { id : /* id from args */ },
  { id : /* another id from args */ },
  ...
]

Другие вопросы по теме