0

我有一个 Laravel 项目,其中包含一些模型、关系和动态范围到模型中,以沿模型关系执行一些查询。我想使用 Lighthouse 包使用 GraphQL 端点查询这些模型。有没有办法从 GraphQL 模式中调用这些动态范围?

我已经尝试了指令 @where(clause: "...") 没有成功。

这是我的模型代码的范围:

class Solicitud extends Model {

    ...
    public function movimientos()
    {
        return $this->hasMany('App\Movimiento', 'id', 'id_solicitud_movimiento');
    }

    public function scopeConEstado($query, $id_estado)
    {
        $query->whereHas('movimientos', function($q) use ($id_estado) {
            $q->where('id_solicitud_estado', '=', $id_estado);
        })->get();
    }
}

当我运行 GraphQL 查询时,我收到一条 SQL 错误消息:

SQLSTATE[22P02]: Invalid text representation: 7 ERROR:  la sintaxis de entrada no es válida para integer: «id_estado» (SQL: select * from \"solicitud\" where exists (select * from \"solicitud_movimientos\" where \"solicitud\".\"id_solicitud_movimiento\" = \"solicitud_movimientos\".\"id\" and \"id_solicitud_estado\" = id_estado))

但是,如果我在代码中将 $id_estado 更改为简单的 1(例如),对于具有 id_solicitud_estado = 1 的项目的任何项目,我都会得到预期的结果,并且没有错误。

当我使用修补程序启动调用范围的查询时,它可以工作。

Solicitud::conEstado(1)->get();

我究竟做错了什么?Lighthouse 的 @where(clause:) 指令会发生什么?也许应该使用另一个指令?

谢谢。

4

1 回答 1

0

首先,您应该->get()scopeConEstado. 范围应该向 中添加子句$query,而不是解析它。至于您的问题,我认为您不能轻松地在架构定义中添加动态范围。您可以做的是向相关字段添加一个@field指令,然后您可以根据需要解析该字段。

于 2019-06-02T17:24:00.143 回答