我有一个Laravel项目,其中包含一些模型、关系和动态范围到模型中,以便沿着模型关系执行一些查询。我想使用GraphQL端点和灯塔包来查询这些模型。有没有办法从GraphQL模式中调用这些动态作用域?
我尝试了@where(子句:"...")指令但没有成功。
这是我的模型代码的作用域:
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的项的项目,我都会得到预期的结果,并且没有错误。
当我使用tinker启动调用作用域的查询时,它工作了。
Solicitud::conEstado(1)->get();
我做错了什么?灯塔中的@where(子句:)指令会发生什么?也许应该使用另一个指令?
谢谢。
发布于 2019-06-03 01:24:00
首先,您应该从scopeConEstado
中删除->get()
。作用域应该向$query
添加子句,而不是解析它。至于您的问题,我认为您不能轻易地在您的模式定义中添加动态作用域。您可以做的是向有问题的字段添加一个@field指令,然后您可以随心所欲地解析该字段。
https://stackoverflow.com/questions/56398709
复制相似问题