Как вызвать TypeResolver из результата MutationResolver? - PullRequest
0 голосов
/ 18 октября 2019

Я создал мутацию, которая вставляет некоторые записи в базу данных, я хотел бы передать результат через соответствующий преобразователь типов, чтобы результат форматировался (клиент ожидает случай верблюда), а также клиент мог бы запрашивать вложенныеданные, если таковые имеются.

Я использую laravel + обертку для graphql ( ребинг )

Моя мутация выглядит следующим образом:

class CreateIngressedAccountsMutation extends Mutation
{    
    protected $attributes = [
        'name' => 'createIngressedAccounts'
    ];

    public function type(): Type
    {
        return Type::nonNull(Type::listOf(GraphQL::type('IngressedAccount')));
    }

    public function args(): array
    {
        return [
            'accounts' => ['type' => Type::nonNull(Type::listOf(GraphQL::type('CreateIngressedAccountInput')))]
        ];
    }


    public function resolve($root, $args, $context, ResolveInfo $resolveInfo, Closure $getSelectFields)
    {
        $accounts = collect($args['accounts']);

        return DB::transaction(function () use ($accounts) {
            return $accounts->map(function ($accountInput) {
                $account = (new IngressedAccount())->fill($accountInput));
                $account->saveOrFail();

                // some logic
                // ...

                // the client expects camel case, so I have to manually include the properties,
                // the IngressedAccountType does it through alias
                $account['createdBy'] = $account->created_by;
                $account['createdAt'] = $account->created_at;
                $account['updatedAt'] = $account->updated_at;
                return $account;
            });
        });


        return $result;
    }
}

Мой IngressedAccountType выглядит следующим образом:

class IngressedAccountType extends GraphQLType
{
    protected $attributes = ['name' => 'IngressedAccount',];

    public function fields(): array
    {
        return [
            'id' => ['type' => Type::nonNull(Type::id())],
            'visitId' => ['type' => Type::nonNull(Type::id()), 'alias' => 'visit_id'],
            'createdBy' => ['type' => Type::nonNull(Type::id())],
            'name' => ['type' => Type::nonNull(Type::string())],
            'type' => ['type' => Type::nonNull(Type::string())],
            'geolocation' => ['type' => Type::nonNull(Type::string())],
            'createdAt' => ['type' => Type::nonNull(Type::string()), 'alias' => 'created_at'],
            'updatedAt' => ['type' => Type::string(), 'alias' => 'updated_at'],

            'visit' => ['type' => Type::nonNull(GraphQL::type('User'))],
            'comments' => ['type' => Type::nonNull(Type::listOf(Type::nonNull(GraphQL::type('Comment'))))]
        ];
    }

    protected function resolveCommentsField($root, $args)
    {
        return Comment::query()->where('entity_id', $root->id)->where('entity_name', 'ingressed_account')->get();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...