You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Lighthouse中如何将父数据传递给子字段?

Laravel Lighthouse嵌套字段传参问题解决方案

你之前尝试修改ResolveInfo的queryPlan或argumentSet来传递参数的思路走不通,因为这两个对象是用来描述查询的静态结构的,并非用于在解析流程中传递动态数据,所以修改它们不会影响子字段的解析参数。

下面给两个可行的解决方案:

方案一:通过父数据($_)传递参数

虽然你认为$_无法传递数据,但其实可以在父字段解析器中把需要的参数附加到返回的父数据上,子字段直接从$_中读取即可:

// PropertiesFiltered类的parent方法
public function parent($root, array $args, GraphQLContext $context, ResolveInfo $resolveInfo)
{
    // 若返回自定义对象,直接添加属性
    $parentData = new \stdClass();
    $parentData->ok = '要传递的参数值';
    
    // 若返回数组,直接添加键值对
    // $parentData = ['ok' => '要传递的参数值'];
    
    return $parentData;
}

// child方法中读取参数
public function child($_, array $args, GraphQLContext $context, ResolveInfo $resolveInfo)
{
    $okValue = is_object($_) ? $_->ok : $_['ok'];
    // 后续业务逻辑处理
}

方案二:通过GraphQLContext传递参数

上下文对象在整个查询解析过程中全局可用,适合跨字段传递数据:

// parent方法中存入参数
public function parent($root, array $args, GraphQLContext $context, ResolveInfo $resolveInfo)
{
    // 将参数存入上下文
    $context->set('properties_ok', '要传递的参数值');
    
    return $parentData;
}

// child方法中取出参数
public function child($_, array $args, GraphQLContext $context, ResolveInfo $resolveInfo)
{
    $okValue = $context->get('properties_ok');
    // 后续业务逻辑处理
}

注意:如果父字段返回批量数据(比如多个模型实例),使用上下文传递时要注意数据隔离,最好结合每个父项的唯一标识存储参数,避免互相覆盖。

内容的提问来源于stack exchange,提问作者Steve Moretz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 22:20:41