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






Во-первых, вы должны удалить ->get() из scopeConEstado. Области должны добавлять пункты к $query, а не разрешать его. Что касается вашего вопроса, я не думаю, что вы можете легко добавить динамическую область в определение схемы. Что вы можете сделать, так это добавить директиву @поле к соответствующему полю, а затем вы можете разрешить это поле, как хотите.
Большое спасибо за ваш ответ. Я удалил ->get() из области видимости. Наконец, я решил использовать директиву @строитель, потому что хочу фильтровать по значению, переданному в качестве аргумента.
Что именно вы хотите запросить с помощью graphql?
movimientosсвязь сconEstadoобластью действияSolicitudэкземпляра?