Как создать вложенные отношения в laravel lighthouse и vue apollo
У меня следующая мутация vue apollo
mutation (
$title: String!
$image: String!
$author: String!
$description: String!
$link: String!
$featured: Boolean
$category: { connect: Int! }
)
{
createBook(
input: {
title: $title
image: $image
author: $author
description: $description
link: $link
featured: $featured
category: $category
}
) {
id
title
author
}
}
И мне нужно ввести только categoryId в этот объект {connect: $categoryId}.
Я также задал свой вопрос на GitHub о laravel lighthouse, но, к сожалению, ответ мне не очень помог.
mutation (
$categoryId: Int!
) {
createBook(
input: {
category: {
connect: $categoryId
}
) {}
}
Если мой вопрос не очень ясен, я могу предоставить полное репо на Github здесь
Обновить проблема здесь
AddBook.gql
mutation(
$title: String!
$image: String!
$author: String!
$description: String!
$link: String!
$featured: Boolean
$category: Int!
) {
createBook(
input: {
title: $title
image: $image
author: $author
description: $description
link: $link
featured: $featured
category: { connect: $categoryId } // $categoryId undefined
}
) {
id
title
author
}
}
Я использую эту мутацию в AddBook.vue
<div class="form-group">
<ApolloQuery
:query="require('@/graphql/queries/Categories.gql')"
class="move-down"
>
<template slot-scope="{ result: { data, loading } }">
<!-- Some content -->
<div v-if="loading">Loading...</div>
<select v-else v-model="categoryId">
<option
v-for="category of data.categories"
:key="category.id"
:value="category.id"
>
{{ category.name }}
</option>
</select>
</template>
</ApolloQuery>
В методе
addBook() {
this.$apollo
.mutate({
// Query
mutation: addBook,
// Parameters
variables: {
$title: this.title,
$image: this.image,
$author: this.author,
$description: this.description,
$link: this.link,
$featured: this.featured,
$categoryId: this.categoryId, // here is the problem
},
})
.then((data) => {
// Result
console.log(data);
})
.catch((error) => {
// Error
console.error(error);
});
},
заранее спасибо
1 ответ
Решение
Переменные должны выглядеть, как показано ниже:
addBook() {
this.$apollo
.mutate({
// Query
mutation: addBook,
// Parameters
variables: {
title: this.title,
image: this.image,
author: this.author,
description: this.description,
link: this.link,
featured: this.featured,
categoryId: this.categoryId, // here is the problem
},
})
.then((data) => {
// Result
console.log(data);
})
.catch((error) => {
// Error
console.error(error);
});
}