Php 如何在不编写长查询的情况下查询所有GraphQL类型字段?
假设您有一个GraphQL类型,它包含许多字段。 如何在不写下包含所有字段名称的长查询的情况下查询所有字段 例如,如果我有以下字段:Php 如何在不编写长查询的情况下查询所有GraphQL类型字段?,php,laravel,graphql,graphql-php,Php,Laravel,Graphql,Graphql Php,假设您有一个GraphQL类型,它包含许多字段。 如何在不写下包含所有字段名称的长查询的情况下查询所有字段 例如,如果我有以下字段: public function fields() { return [ 'id' => [ 'type' => Type::nonNull(Type::string()), 'description' => 'The id of th
public function fields()
{
return [
'id' => [
'type' => Type::nonNull(Type::string()),
'description' => 'The id of the user'
],
'username' => [
'type' => Type::string(),
'description' => 'The email of user'
],
'count' => [
'type' => Type::int(),
'description' => 'login count for the user'
]
];
}
要查询所有字段,通常查询如下:
FetchUsers{users(id:"2"){id,username,count}}
但是我想要一种不写所有字段也能得到相同结果的方法,比如:
FetchUsers{users(id:"2"){*}}
//or
FetchUsers{users(id:"2")}
在GraphQL中是否有这样做的方法
我正在使用Allocaterier/laravel graphql库。我想唯一的方法是利用可重用片段:
fragment UserFragment on Users {
id
username
count
}
FetchUsers {
users(id: "2") {
...UserFragment
}
}
我想唯一的方法是利用可重用的片段:
fragment UserFragment on Users {
id
username
count
}
FetchUsers {
users(id: "2") {
...UserFragment
}
}
不幸的是,你想做的是不可能的。GraphQL要求您明确指定希望从查询中返回哪些字段。不幸的是,您不可能这样做。GraphQL要求您明确指定希望从查询返回的字段。当我需要从google places API将序列化的位置数据加载到数据库中时,我遇到了同样的问题。一般来说,我希望整个过程能够与地图一起工作,但我不希望每次都必须指定所有字段 我在Ruby中工作,所以我不能给出PHP实现,但原理应该是一样的 我定义了一个名为JSON的自定义标量类型,它只返回一个文本JSON对象 ruby实现是这样的(使用graphql ruby) 然后我把它用在我们的物体上
field :location, Types::JsonType
不过,我会非常谨慎地使用它,只在您知道始终需要整个JSON对象的情况下使用它(就像我在本例中所做的那样)。否则,一般来说,它会破坏GraphQL的对象。当我需要加载从google places API序列化到数据库中的位置数据时,我遇到了同样的问题。一般来说,我希望整个过程能够与地图一起工作,但我不希望每次都必须指定所有字段 我在Ruby中工作,所以我不能给出PHP实现,但原理应该是一样的 我定义了一个名为JSON的自定义标量类型,它只返回一个文本JSON对象 ruby实现是这样的(使用graphql ruby) 然后我把它用在我们的物体上
field :location, Types::JsonType
不过,我会非常谨慎地使用它,只在您知道始终需要整个JSON对象的情况下使用它(就像我在本例中所做的那样)。否则,从更广泛的意义上讲,它将破坏GraphQL的对象。是的,您可以使用。进行如下图形SQL查询(对于类型UserType) 您将得到如下响应(实际字段名将取决于实际的模式/类型定义) 然后,您可以读取客户机中的字段列表,并动态构建第二个GraphQL查询以获取所有这些字段的值 这取决于您知道要获取字段的类型的名称——如果您不知道类型,可以使用类似于
{
__schema {
types {
name
fields {
name
description
}
}
}
}
注意:这是线上图形QL数据——您可以自己决定如何使用实际客户机进行读写。您的graphQL javascript库可能已经在某些功能中使用了内省功能,例如,该命令使用内省来生成类型。是的,您可以使用。进行如下图形SQL查询(对于类型UserType) 您将得到如下响应(实际字段名将取决于实际的模式/类型定义) 然后,您可以读取客户机中的字段列表,并动态构建第二个GraphQL查询以获取所有这些字段的值 这取决于您知道要获取字段的类型的名称——如果您不知道类型,可以使用类似于
{
__schema {
types {
name
fields {
name
description
}
}
}
}
注意:这是线上图形QL数据——您可以自己决定如何使用实际客户机进行读写。您的graphQL javascript库可能已经在某些功能中使用了内省功能,例如,该命令使用内省来生成类型。旨在允许:
# Only most used selection properties
fragment UserDetails on User {
id,
username
}
然后,您可以通过以下方式查询所有用户详细信息:
FetchUsers {
users() {
...UserDetails
}
}
您还可以:
设计的目的是为了允许:
# Only most used selection properties
fragment UserDetails on User {
id,
username
}
然后,您可以通过以下方式查询所有用户详细信息:
FetchUsers {
users() {
...UserDetails
}
}
您还可以:
包graphql类型json支持自定义标量类型json。 使用它可以显示json对象的所有字段。 下面是ApolloGraphql服务器中示例的链接。
包graphql类型json支持自定义标量类型json。 使用它可以显示json对象的所有字段。 下面是ApolloGraphql服务器中示例的链接。
如果我这样做了,那么我仍然必须“至少在片段中”写入每个字段名,这是我试图避免的,似乎GraphQL迫使我们显式。如何在POSTMan查询中添加这一点?或jquery/UI框架来生成字符串化的JSON。这个graphiQL对于实际的开发目的似乎是无用的。这仅仅是为了重用的目的。@BlackSigma考虑到,这应该是最好的answer@JPVentura:不,我的朋友,可重用性和通配符bo之间有区别