首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Laravel项目中从GraphQL模式调用一个雄辩的动态作用域(只有一个参数)?

如何在Laravel项目中从GraphQL模式调用一个雄辩的动态作用域(只有一个参数)?
EN

Stack Overflow用户
提问于 2019-06-01 00:27:13
回答 1查看 926关注 0票数 0

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

我尝试了@where(子句:"...")指令但没有成功。

这是我的模型代码的作用域:

代码语言:javascript
复制
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错误,如下所示:

代码语言:javascript
复制
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启动调用作用域的查询时,它工作了。

代码语言:javascript
复制
Solicitud::conEstado(1)->get();

我做错了什么?灯塔中的@where(子句:)指令会发生什么?也许应该使用另一个指令?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-03 01:24:00

首先,您应该从scopeConEstado中删除->get()。作用域应该向$query添加子句,而不是解析它。至于您的问题,我认为您不能轻易地在您的模式定义中添加动态作用域。您可以做的是向有问题的字段添加一个@field指令,然后您可以随心所欲地解析该字段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56398709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档