Маяк php laravel - перечисления и пагинатор не работают - PullRequest
0 голосов
/ 24 апреля 2020

Извините, я довольно новичок в graphQL и маяке. Я не уверен, что это ошибка или я что-то пропустил в документации. Я использовал стандартный распознаватель страниц, и запросы работали нормально. Однако мне нужно было добавить некоторые параметры, поэтому я следовал за документацией, чтобы построить свой собственный ... строитель. Два из моих полей имеют пользовательские типы. Нет проблем при использовании paginator по умолчанию, но при использовании моего собственного компоновщика я получаю такие ошибки

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

Я думаю, что это связано с использованием обычного 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")
}

App \ ViewingRequestRead

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 расширяет 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.

Output / Логи

Нажмите, чтобы развернуть

"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

...