当字符串是唯一的时,“错误:字符上将违反唯一约束。详细信息:字段名称=名称”

时间:2019-04-21 18:27:06

标签: reactjs graphql prisma-graphql

我有一个具有以下数据模型的字符:

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;
    },

这是React端的GQL突变:

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: ''
                                    })
                                }}>

并且可以确认提交后字符名称已正确传递到状态。无论如何,刷新后仍然会发生这种情况。

0 个答案:

没有答案