我有一个具有以下数据模型的字符:
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: ''
})
}}>
并且可以确认提交后字符名称已正确传递到状态。无论如何,刷新后仍然会发生这种情况。