0

我有一个模型调用任务,它可以依赖于另一个任务。所以我们有一个父任务和一个子任务,两个具有相同模型的对象。

所以我写了这个方案:


type Task {
    id: ID!
    content: JSON!
    task: Task @belongsTo(relation: "task")
    created_at: DateTime!
    updated_at: DateTime!
}

当我检查我的呼叫任务是否为空时,我已经用修补程序进行了测试,并且我的关系运行良好。知道如何解决吗?

4

1 回答 1

1

好吧,我解决了创建指令:

<?php

namespace App\GraphQL\Directives;

use Closure;
use GraphQL\Type\Definition\ResolveInfo;
use Nuwave\Lighthouse\Schema\Values\FieldValue;
use Nuwave\Lighthouse\Support\Contracts\Directive;
use Nuwave\Lighthouse\Support\Contracts\FieldMiddleware;
use Nuwave\Lighthouse\Support\Contracts\GraphQLContext;

class belongsToSameModelDirective implements Directive, FieldMiddleware
{
    public function name(): string
    {
        return 'belongsToSameModel';
    }

    public function handleField(FieldValue $fieldValue, Closure $next): FieldValue
    {

        $previousResolver = $fieldValue->getResolver();

        $wrappedResolver = function ($root, array $args, GraphQLContext $context, ResolveInfo $info) use ($previousResolver) {

            $result = $previousResolver($root, $args, $context, $info);

            return $result;
        };

        $fieldValue->setResolver($wrappedResolver);
        return $next($fieldValue);
    }
}

它有效,实际上比问题本身更简单

于 2020-05-16T15:45:23.843 回答