我正在尝试编写一个 GraphQL 突变来进行更新。在此应用程序中,名为 QuickPossession 的 DataObject 包含对应于第 3 方数据库的第二个 ID。我需要根据第二个 ID 更新 QuickPossessions。这是模型:
<?php
namespace Organization\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 = [
'SecondID' => 'Int',
'Title' => 'Varchar(255)',
'Address' => 'Varchar(255)',
'SquareFeet' => 'Int',
];
public function provideGraphQLScaffolding(SchemaScaffolder $scaffolder) {
$scaffolder
->type(QuickPossession::class)
->addFields([
'SecondID',
'ID',
'Title',
'Address',
'SquareFeet'
])
->operation(SchemaScaffolder::CREATE)
->end()
->operation(SchemaScaffolder::READ)
->end()
->operation(SchemaScaffolder::UPDATE)
->end()
->end();
return $scaffolder;
}
}
而在我的mysite.yml
SilverStripe\GraphQL\Controller:
schema:
scaffolding_providers:
- Organization\HomeBuilderSite\DataObjects\QuickPossession
我能够成功运行以下突变:
mutation UpdateQuickPossession($ID: ID!, $Input: QuickPossessionUpdateInputType!) {
updateQuickPossession(ID: $ID, Input: $Input) {
Title
}
}
使用这些变量:
{
"ID": "3",
"Input": {
"Title": "Example Home Name",
"Address": "123 Smith Street"
}
}
正确地给出了这个输出:
{
"data": {
"updateQuickPossession": {
"Title": "Example Home Name"
}
}
}
但我不知道如何使用 SecondID 作为唯一标识符来做同样的事情。我尝试了以下方法:
mutation UpdateQuickPossession($ID: SecondID!, $Input: QuickPossessionUpdateInputType!) {
updateQuickPossession(SecondID: $ID, Input: $Input) {
Title
}
}
使用这些变量:
{
"SecondID": "1457",
"Input": {
"Title": "Example Home Name",
"Address": "123 Smith Street"
}
}
这会产生此错误:
{
"data": null,
"errors": [
{
"message": "Unknown type \"SecondID\".",
"locations": [
{
"line": 1,
"column": 37
}
]
},
{
"message": "Unknown argument \"SecondID\" on field \"updateQuickPossession\" of type \"Mutation\".",
"locations": [
{
"line": 2,
"column": 24
}
]
},
{
"message": "Field \"updateQuickPossession\" argument \"ID\" of type \"ID!\" is required but not provided.",
"locations": [
{
"line": 2,
"column": 2
}
]
}
]
}
我的问题是:突变只适用于主 ID 吗?是否可以使用替代的唯一标识符?
还是我错过了其他东西?也许这是使用脚手架方法为 GraphQL 查询设置 DataObjects 的限制?非常感谢 :)
我一直在参考silverstripe-graphql和graphql.org文档。