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

Lighthouse mutation调用模型方法时@find与@method冲突如何解决

报错原因

@find 和 @method 都属于Lighthouse的字段解析器指令,Lighthouse限定单个字段仅能配置一个解析器类指令,平级放置两个同类型指令就会触发你遇到的报错。

正确实现方式

方案1:搭配@after中间件调用实例方法(推荐)

如果你要调用的是Article的实例方法,用@after作为字段中间件,在@find查询到实例后自动调用方法,不会触发解析器冲突:

type Mutation {
  doSomething(id: ID! @eq): Article!
    @find
    @after(apply: "doSomething")
}

这个写法下@find会先根据传入的id匹配到对应Article实例,@after会自动调用该实例上的doSomething方法,最终返回方法执行后的Article实例。

方案2:单独用@method调用静态方法

你也可以直接把doSomething定义为模型的静态方法,单独使用@method作为解析器,自己在方法内部处理实例查询逻辑:
GraphQL定义:

type Mutation {
  doSomething(id: ID!): Article!
    @method(name: "doSomething")
}

对应Article模型代码:

public static function doSomething(mixed $root, array $args): Article
{
    $article = self::findOrFail($args['id']);
    // 编写你的业务逻辑
    $article->update([/* 你的更新字段 */]);
    return $article;
}

内容的提问来源于stack exchange,提问作者Daniel Loureiro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:06:02