首页 文章

如何在vue-apollo客户端中定义GraphQL输入类型

提问于
浏览
0

情况:

我使用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服务器的一些信息,但我需要在客户端 .

所以基本上问题是改变数据列表 .

1 回答

  • 1

    您的输入类型仍应在服务器上的架构内定义 . 我对laravel并不熟悉,但是查看laravel-graphql的文档,看起来输入的定义与常规类型一样,只需将 $inputObject 属性设置为true即可 . 请参见示例here . 我想你会将它们与常规类型一起添加到 config/graphql.php 中的类型中 .

    我还建议将输入重命名为 SongPartInput 之类的内容,这样如果你还有一个SongPart类型,你就不会感到困惑 .

相关问题