使用自定义字段解析器指令进行分页
Pagination with custom field resolver directive
我要实现的目标如下:
我想要一个搜索模型的查询,这个查询可能很复杂,因此需要一个单独的解析器或某个我可以放置我的逻辑的地方。
出了什么问题:
这是我的查询
fighters(q: String): [FighterProfile] @field(resolver: "App\Http\Controllers\FighterProfileController@search")
这是我的解析器
public function search($rootValue, array $args, GraphQLContext $context, ResolveInfo $resolveInfo) {
$user = auth()->user();
$q = isset($args['q']) ? $args['q'] : null;
$query = FighterProfile::distinct();
// admin and federation can see all fighters
if ($user->type === 'member') {
$fighterProfile = $user->fighterProfile;
$query->where('club_id', $fighterProfile->club_id);
}
if ($q) {
$query->where(function ($subQuery) use ($q) {
$subQuery->where('first_name', 'LIKE', '%' . $q . '%')
->orWhere('last_name', 'LIKE', '%' . $q . '%');
});
}
$query->where('type', 'fighter');
return $query->paginate(25);
}
现在的输出只是一个包含 25 个项目的列表,没有关于分页的信息。当我尝试添加 @paginate 指令时,出现以下错误
Node [fighters] can only have one directive of type [Nuwave\Lighthouse\Support\Contracts\FieldResolver] but found []
如何添加我的自定义逻辑但仍然有分页?
您不能将 @field
与 @paginate
结合使用,但可以将 @paginate
与 @builder
结合使用。
如果您仍然需要自定义解析器,您可以创建自己的自定义指令,例如 https://lighthouse-php.slack.com/archives/CB28A070S/p1574102072286100?thread_ts=1574101207.285300
我要实现的目标如下: 我想要一个搜索模型的查询,这个查询可能很复杂,因此需要一个单独的解析器或某个我可以放置我的逻辑的地方。
出了什么问题: 这是我的查询
fighters(q: String): [FighterProfile] @field(resolver: "App\Http\Controllers\FighterProfileController@search")
这是我的解析器
public function search($rootValue, array $args, GraphQLContext $context, ResolveInfo $resolveInfo) {
$user = auth()->user();
$q = isset($args['q']) ? $args['q'] : null;
$query = FighterProfile::distinct();
// admin and federation can see all fighters
if ($user->type === 'member') {
$fighterProfile = $user->fighterProfile;
$query->where('club_id', $fighterProfile->club_id);
}
if ($q) {
$query->where(function ($subQuery) use ($q) {
$subQuery->where('first_name', 'LIKE', '%' . $q . '%')
->orWhere('last_name', 'LIKE', '%' . $q . '%');
});
}
$query->where('type', 'fighter');
return $query->paginate(25);
}
现在的输出只是一个包含 25 个项目的列表,没有关于分页的信息。当我尝试添加 @paginate 指令时,出现以下错误
Node [fighters] can only have one directive of type [Nuwave\Lighthouse\Support\Contracts\FieldResolver] but found []
如何添加我的自定义逻辑但仍然有分页?
您不能将 @field
与 @paginate
结合使用,但可以将 @paginate
与 @builder
结合使用。
如果您仍然需要自定义解析器,您可以创建自己的自定义指令,例如 https://lighthouse-php.slack.com/archives/CB28A070S/p1574102072286100?thread_ts=1574101207.285300