У меня есть проект Laravel с некоторыми моделями, связями и динамическими областями действия в моделях для выполнения некоторых запросов по связям моделей. Я хочу запросить эти модели, используя конечную точку GraphQL, используя пакет Lighthouse. Есть ли способ вызвать эти динамические области из схемы 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, без ошибок.
Когда я запускаю с тинкером запрос, вызывающий область действия, он работает.
Solicitud::conEstado(1)->get();
Что я делаю не так? Что происходит с директивой @where (clause :) от Lighthouse? Может быть, следует использовать другую директиву?
Спасибо.