我有一个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 :)指令会发生什么情况?也许应该使用另一个指令?
谢谢。
答案 0 :(得分:0)
首先,您应该从->get()
中删除scopeConEstado
。范围应将子句添加到$query
,而不是解析它。至于您的问题,我认为您不能轻松地在架构定义中添加动态范围。您可以做的是在有问题的字段中添加一个@field指令,然后可以根据需要解析该字段。