首页 > 解决方案 > Lighthouse php laravel - 枚举和分页器不起作用

问题描述

抱歉,我对 graphQL 和 lighthouse 还很陌生。我不确定这是否是一个错误,或者我是否错过了文档中的某些内容。我使用了默认的分页器解析器并且查询工作正常。但是我需要添加一些参数,所以按照文档构建我自己的...构建器。我的两个字段具有自定义类型。使用默认分页器时没有问题,但是使用我的自定义构建器时,我会收到这样的错误

Expected a value of type "ViewingRequestStatus" but received: 3

我认为这与使用常规 DB Builder 而不是雄辩的 DB Builder 有关,但分页器需要常规 DB Builder。

架构

type ViewingRequest @model(class: "\\AppViewingRequestRead"){
    uuid: String!
    requestorUuid: String!
    scheduleUuid: String!
    districtUuid: String!
    congregationUuid: String!
    siteUuid: String
    status: ViewingRequestStatus
    language: Languages
    user_uuid: String
    streamEventUuid: String!
}

type Languages{
    name: String
    id: Int
}

extend type Query {
    viewingRequests(
        streamEventUuid: String, 
        scheduleUuid: String, 
        requestorUuid: String
    ): [ViewingRequest!]! @paginate(model: "App\\ViewingRequestRead", builder: "App\\ViewingRequestRead@showRequests")
}

应用\查看请求读取

class ViewingRequestRead extends IncRead
{
    protected $enumCasts = [
        'status' => ViewingRequestStatus::class,
        'language' => Languages::class,

    ];

    protected $casts = [
        'status' => 'int',
        'language' => 'int'
    ];

    public function showRequests($root, array $args, GraphQLContext $context, ResolveInfo $resolveInfo): Builder
    {
        return DB::table('viewing_requests')
        ->when(key_exists("streamEventUuid", $args), function ($q) use ($args) {
            return $q->where('streamEventUuid', '=', $args["streamEventUuid"]);
        })->when(key_exists("scheduleUuid", $args), function ($q) use ($args) {
            return $q->where('scheduleUuid', '=', $args["scheduleUuid"]);
        })->when(key_exists("requestorUuid", $args), function ($q) use ($args) {
            return $q->where('requestorUuid', '=', $args["requestorUuid"]);
        });

ViewingRequestEnum (IncEnum Extends BenSampo\Enum\Enum) 如灯塔文档中所述。

<?php

namespace App\Enums;

use App\Enums\IncEnum;


final class ViewingRequestStatus extends IncEnum
{
    const Archived = 0;
    const New =   1;
    const LocaleSubmitted =   2;
    const DistrictSubmitted = 3;
    const LocaleApproved =   4;
    const DistrictApproved = 5;
    const CentralApproved = 6;
    const Cancelled = 7;
    const Denied = 8;
    const Draft = 9;
}

这是通过 GraphQlServiceProvider 注册的。

输出/日志

点击展开

"debugMessage" => "Expected a value of type "Languages" but received: 1"
      "message" => "Internal server error"
      "extensions" => array:1 [
        "category" => "internal"
      ]
      "locations" => array:1 [
        0 => array:2 [
          "line" => 8
          "column" => 21
        ]
      ]
      "path" => array:4 [
        0 => "viewingRequests"
        1 => "data"
        2 => 2
        3 => "language"

环境

灯塔版本:4.11.0 Laravel 版本:7.5.1

标签: phplaravelenumslaravel-lighthouse

解决方案


推荐阅读