«Ошибка: уникальное ограничение будет нарушено для символа. Детали: имя поля = имя», если строка уникальна - PullRequest
0 голосов
/ 21 апреля 2019

У меня есть тип персонажа со следующей моделью данных:

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]
}

Персонаж должен иметь все поля имени уникальными. Никаких проблем с этим пока нет.

Вот мутация схемы для создания персонажа:

createCharacter(
        name: String!
        name_ja: String
        name_ko: String
        name_zh_CN: String
        name_zh_TW: String
        name_zh_HK: String
        game: String!
): Character!

Вот фактическая мутация узла:

async createCharacter(parent, args, ctx, info) {
        // Check if user is logged in.
        if (!ctx.request.userId) {
            throw new Error('You must be logged in');
        }
        // Get the arguments
        const character = {...args};
        const game = args.game
        console.log(character);
        delete character.game;
        const newCharacter = await ctx.db.mutation.createCharacter({
            data: {
                ...character,
                games: {
                    connect: {
                        name: game
                    }
                }
            }
        }, info);
        return newCharacter;
    },

Вот мутация GQL на стороне React:

const CREATE_CHARACTER_MUTATION = gql`
    mutation CREATE_CHARACTER_MUTATION(
        $name: String!
        $name_ja: String!
        $name_ko: String!
        $name_zh_CN: String!
        $name_zh_TW: String!
        $name_zh_HK: String!
        $game: String!
    ) {
        createCharacter(
            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
            game: $game
        ) {
            id
            name
            name_ja
            name_ko
            name_zh_CN
            name_zh_TW
            name_zh_HK
            games {
                id
                name
            }
        }
    }
`;

И все же, когда я пропускаю уникальное имя персонажа, мне выдается эта ошибка: «На персонаже будет нарушено уникальное ограничение. Детали: Имя поля = имя»

Как ни странно, мне удалось протолкнуть одно имя персонажа насквозь, и при второй попытке и каждой последующей попытке он выдает эту ошибку.

Я очищаю состояние (за исключением игры) при отправке формы:

                                    e.preventDefault();
                                    const res = await createCharacter();
                                    console.log(res);
                                    this.setState({
                                        name: '',
                                        name_ja: '',
                                        name_ko: '',
                                        name_zh_CN: '',
                                        name_zh_TW: '',
                                        name_zh_HK: ''
                                    })
                                }}>

И может подтвердить, что имя персонажа передается в правильное состояние после отправки Несмотря на это, это все еще происходит после обновления.

...