我使用laravel-graphql作为后端GraphQL服务,使用vue-apollo作为前端客户端。
在我的Vue组件中,我有一个gql查询,如下所示:(关系:一首歌有更多的SongPart)
const getSong = gql`
query FetchSong ($id:Int!){
song(id: $id) {
id,
name,
authors_lyrics,
authors_music
song_parts{
type
lyrics
}
}
}`;
现在有一个我想用来更新给定歌曲的突变:
const updateSong = gql`
mutation updateSongMutation ($id:Int!,$name:String,$authors_lyrics:String,$authors_music:String, $song_parts: [SongPart]) {
updateSongMutation(id: $id, name: $name, authors_lyrics: $authors_lyrics, authors_music: $authors_music, song_parts: $song_parts) {
id
}
}`;
..并以这种方式使用Vue组件:
methods: {
save: function(){
this.$apollo.mutate({
mutation: updateSong,
variables: this.songData,
}).then((result) => {
console.log(result);
}).catch((error) => {
console.log(error);
})
}
},
但是,要更新song_parts数组,我需要定义一个自定义输入类型:
input SongPart{
id: Int!
lyrics: String
}
我无法弄清楚,在哪里定义此输入类型。当我在Chrome WebTools中使用GraphiQL时,在突变之前定义它是没有问题的。我也找到了apollo服务器的一些信息,但我需要在客户端。
所以基本上问题在于改变数据列表。
答案 0 :(得分:1)
您的输入类型仍应在服务器上的架构内定义。我对laravel并不熟悉,但是查看laravel-graphql的文档,看起来输入定义就像常规类型一样,只需将$inputObject
属性设置为true即可。请参阅示例here。我想你会将它们与常规类型一起添加到config/graphql.php
内的类型中。
我还建议将输入重命名为SongPartInput
,这样如果您还有SongPart的类型,就不会感到困惑。