У меня есть тип персонажа со следующей моделью данных:
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: ''
})
}}>
И может подтвердить, что имя персонажа передается в правильное состояние после отправки Несмотря на это, это все еще происходит после обновления.