问题描述
我不认为我在以正确的 graphQL 方式做事,但我不确定如何在 graphQL 中实现它。
我有以下架构,然后将其上传到 FaunaDB,他们做了一些魔术将其转换为可用的 graphQL api 端点。
type Catalog {
decor: Boolean
clothing: Boolean
supplies: Boolean
furniture: Boolean
owner: User
}
type Decor {
description: String
pieces: Int
purchaser: String
alterations: Boolean
cost: Int
purchaseDate: Date
category: String
image: String
itemNum: Int
owner: User!
visible: Boolean
}
type DecorSheet {
sheetName: String
refIdArray: String
owner: User!
}
type User {
email: String! @unique
catalog: Catalog
decor: [Decor!] @relation
decorSheet: [DecorSheet!] @relation
}
type Query {
getMultipleDecors(DecorId: [ID!]): [Decor]
@resolver(name: "get_multiple_decors")
}
我需要创建一个DecorSheet类型,我需要refIdArray,成为一个像这样的对象数组
[
{
"refId0": "293164663883956749"
},{
"refId1": "293526016787218952"
}
]
我有以下突变 gql 可以触发阿波罗
const CREATE_DECOR_SHEET = gql`
mutation CreateDecorSheet(
$ownerID: ID!
# $description: String!
$sheetName: String
$refIdArray: String!
) {
createDecorSheet(data: { sheetName: $sheetName,refIdArray: $refIdArray,owner: { connect: $ownerID } }) {
refIdArray
sheetName
_id
}
}
`;
const res = await createDecorSheet({
variables: {
ownerID: user.id,// ...dataMassage,sheetName: dataForm.sheetName,refIdArray: JSON.stringify(chosenValues),//A WAY TO DO THIS GRAPHQL STYLE
},}).catch(console.error);
目前我正在对 selectedValues 进行字符串化,这与我上面列出的数组中 refId 和 Id 对象的值相同。
有没有更好的方法来做到这一点,我是否需要编写一个自定义突变,您可以将一组对象传递给 refIdArray。
如果有人能帮上忙,那就太好了。
谢谢
解决方法
我最终将架构更新为
type DecorSheet {
sheetName: String
refIdArray: [ID]
owner: User!
}
然后我就按原样传递了我的数组
const res = await createDecorSheet({
variables: {
ownerID: user.id,// ...dataMassage,sheetName: dataForm.sheetName,refIdArray: chosenValues,//array here
},}).catch(console.error);
gql 突变看起来是这样
const CREATE_DECOR_SHEET = gql`
mutation CreateDecorSheet(
$ownerID: ID!
# $description: String!
$sheetName: String
$refIdArray: [ID]
) {
createDecorSheet(
data: {
sheetName: $sheetName
refIdArray: $refIdArray
owner: { connect: $ownerID }
}
) {
refIdArray
sheetName
_id
}
}
`;