My GraphQLスキーマは次のように定義されています。
type Query {
getEntity(id: Int!): Entity
getEntityUsers(entityId: Int!, statusId: Int): [User]
}
type Entity {
id: Int!
name: String!
email: String!
logo: String
createdAt: DateTime!
updatedAt: DateTime!
users(statusId: Int): [User]
}
_
ご覧のとおり、私はEntity
オブジェクトをユーザーに取得する方法が2つあります。現在私の照会のために機能しているものは、getEntityUsers
rootリゾルバメソッドです。このクエリは次のようになります。
query getEntityUsers($entityId: Int!, $statusId: Int) {
users: getEntityUsers(entityId: $entityId, statusId: $statusId) {
...
}
}
_
..変数を使って:
{
entityId: 1,
statusId: 2
}
_
statusId
を渡すことを可能にすることによって他の方法を作るためのものですか?今すぐクエリは次のようになります。
query getEntity($id: Int!) {
entity: getEntity(id: $id) {
...
users (statusId: 2) {
...
}
}
}
_
これは明らかに変数と連携します。
{
id: 1
}
_
しかし、私がこの2番目の方法を使ってstatusId
を変更したい場合はどうなりますか?ルートリゾルバで定義されていない場合は、statusId
を渡す方法はありますか?
クエリを試してみました。
query getEntity($id: Int!) {
entity: getEntity(id: $id) {
...
users (statusId: $statusId) {
...
}
}
}
_
..変数を使って:
{
id: 1,
statusId: 2
}
_
しかし、私は誤りを得るだけです:Variable "$statusId" is not defined by operation "getEntity".
これを行うには何がありますか?
すべての操作(クエリまたは突然変異)は、その操作内で使用する変数を明示的に定義する必要があります。そのため、_$statusId
_という変数がある場合は、この変数の型を操作定義の一部として指定する必要があります。
_query getEntity($id: Int!, $statusId: Int) {
# your selection set here
}
_
これらの変数がクエリ内で(ルートレベルまたは他の場所で)使用されている場合は、無関係です - それらは常にあなたの操作定義の一部として定義されなければなりません。