【问题标题】:SilverStripe GraphQL - Syntax ErrorSilverStripe GraphQL - 语法错误
【发布时间】:2018-02-14 23:07:56
【问题描述】:

我试图将一个基本的 DataObject 搭建到架构中,但我的查询引发了以下错误:

http://localhost:8080/graphql:

{
  "data": null,
  "errors": [
    {
      "message": "Syntax Error GraphQL request (1:1) Unexpected <EOF>\n\n1: \n   ^\n",
      "locations": [
        {
          "line": 1,
          "column": 1
        }
      ]
    }
  ]
}

还有,http://localhost:8080/graphql/?query={readQuickPossessions{ID+Title+Address+SquareFeet}}:

{
  "data": null,
  "errors": [
    {
      "message": "Syntax Error GraphQL request (1:25) Cannot parse the unexpected character \"+\".\n\n1: {readQuickPossessions{ID+Title+Address+SquareFeet}}\n                           ^\n",
      "locations": [
        {
          "line": 1,
          "column": 25
        }
      ]
    }
  ]
}

这是数据对象:

<?php
namespace Trigger\HomeBuilderSite\DataObjects;

use SilverStripe\ORM\DataObject;
use SilverStripe\GraphQL\Scaffolding\Interfaces\ScaffoldingProvider;
use SilverStripe\GraphQL\Scaffolding\Scaffolders\SchemaScaffolder;

class QuickPossession extends DataObject implements ScaffoldingProvider {
  private static $table_name = 'QuickPossession';

  private static $db = [
    'Title' => 'Varchar(255)',
    'Address' => 'Varchar(255)',
    'SquareFeet' => 'Int',
  ];

  private static $has_one = [];

  public function provideGraphQLScaffolding(SchemaScaffolder $scaffolder) {
    $scaffolder
      ->type(QuickPossession::class)
        ->addFields([
          'ID', 
          'Title',
          'Address', 
          'SquareFeet'
        ])
        ->operation(SchemaScaffolder::READ)
          ->end()
        ->operation(SchemaScaffolder::UPDATE)
          ->end()
        ->end();
    return $scaffolder;
  }
}

在 mysite.yml 中:

SilverStripe\GraphQL\Controller:
  schema:
    scaffolding_providers:
      - Trigger\HomeBuilderSite\DataObjects\QuickPossession

对我所缺少的有什么见解吗?

【问题讨论】:

    标签: php graphql silverstripe-4


    【解决方案1】:

    我已经回复了票。问题似乎是无效查询。默认情况下,读操作有分页。

    query {
      readQuickPosessions {
        edges {
           node {
             ID
             Title
           }
        }
        pageInfo {
           hasNextPage
        }
    }
    

    或者,您可以在操作节点上使用-&gt;setUsePagination(false) 关闭分页。

    您也可以使用silverstripe graphql devtools 进行调试。

    【讨论】:

    • 感谢您对问题和 StackOverflow 的回答!
    • 我在查询中缺少 edgesnode。已解决并关闭的问题here
    【解决方案2】:

    silverstripe-graphql 生成的查询似乎不正确:

    {readQuickPossessions{ID+Title+Address+SquareFeet}}
    

    没有+syntax in GraphQL queries

    我会建议尝试the YAML method to scaffold an object 看看是否有区别,并且可能会有修复此问题的更新。

    如果这不起作用,并且您已经检查了所有语法,那么您绝对应该report an issue

    【讨论】:

    • 刚刚尝试了YAML方法搭建脚手架。是否可能还有另一个问题在起作用,因为即使对 /graphql 端点的空查询也会导致错误?在这种情况下,+ 语法似乎不应该成为问题。我会跟进一个问题。
    • @JustinTBrown 可能是这种情况
    猜你喜欢
    • 2017-07-27
    • 2019-11-02
    • 2021-08-20
    • 2020-09-12
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 2020-06-07
    • 2021-09-14
    相关资源
    最近更新 更多