【发布时间】:2021-02-18 17:13:04
【问题描述】:
我正在为 Nuxt 应用程序创建 Laravel 后端,并使用 Lighthouse-PHP 通过 GraphQL 传递数据。
我正在尝试设置一个查询以通过 slug 而不是默认 ID 进行查找。当我在 graphql 操场上运行查询时,它会正确返回数据,但是当我在前端加载页面时,它会返回 null。
后端
schema.graphql
type Query {
forumCategoryBySlug(slug: String! @eq): ForumCategory @find
}
type ForumCategory {
id: ID!
title: String!
description: String!
slug: String!
subcategories: [ForumSubcategory!]! @hasMany
created_at: DateTime!
updated_at: DateTime!
}
ForumCategory.php 模型
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class ForumCategory extends Model
{
protected $fillable = [
'title', 'description', 'slug'
];
public function subcategories(): HasMany
{
return $this->hasMany(ForumSubcategory::class);
}
}
前端
Index.vue
import categoryQuery from '~/apollo/queries/forum/category.gql';
export default {
apollo: {
category: {
prefetch: false,
fetchPolicy: 'network-only',
query: categoryQuery,
variables () {
return {
slug: this.$route.params.slug
};
}
}
},
}
category.gql
query Category($slug: String!) {
category: forumCategoryBySlug(slug: $slug) {
id
title
description
slug
}
}
我觉得我对每一件小事都进行了三次检查,但我一生都无法弄清楚为什么数据仍在返回 null。任何帮助将不胜感激!
【问题讨论】:
-
比较网络请求(使用 graphiql/playground)、正文(变量的值是否正确传递?)、标头、... auth/ACL 原因?
-
我实际上只是在这样做,它们似乎是相同的。我现在正在创建一个自定义解析器 (lighthouse-php.com/3.1/the-basics/fields.html#resolving-fields)
-
尝试在邮递员中重新创建请求
-
那里看起来一切都很好。我不确定为什么它在 Playground 而不是在应用程序中工作,但我觉得这与需要创建自定义 Lighthouse 解析器有关。
-
不是,如果它在操场上工作,肯定不是解析器级别(仍然是“外部”,来自 FE 调用)...中间件/身份验证/其他原因,请检查详细的标题/cors/身份验证跨度>
标签: laravel graphql nuxt.js vue-apollo laravel-lighthouse