Есть ли способ определить сложные условия where как переменные?

#php #laravel #graphql #apollo-client #laravel-lighthouse

#php #laravel #graphql #apollo-клиент #laravel-lighthouse

Вопрос:

Я создал запрос GraphQL, который получает сложные условия where, но в клиенте Apollo GraphQL для iOS нет способа изменить запрос после компиляции проекта. Клиент Apollo GraphQL для iOS дает возможность изменять определенные переменные в запросе, но не сам запрос.

Мой оригинальный запрос Lighthouse GraphQL выглядит следующим образом;

 query ($first:Int, $page:Int) {
    my_listings(
        where: {
            AND: [
                { column: NET_AREA, operator: GTE, value: 200 }
            ]
        }
        orderBy: [
            { column: ID, order: ASC }
            ]
        first: $first
        page: $page
    ) {
        data {
            ...listingFields
        }
        paginatorInfo {
            currentPage
            lastPage
        }
    }
}
  

Измененный запрос Lighthouse GraphQL выглядит так, только добавлена переменная $conditions, которая является MyListingsWhereWhereConditions типом.

 query($first: Int, $page: Int, $conditions:MyListingsWhereWhereConditions) {
  my_listings(
    where: $conditions
    orderBy: [{ column: ID, order: ASC }]
    first: $first
    page: $page
  ) {
    data {
      ...listingFields
    }
    paginatorInfo {
      currentPage
      lastPage
    }
  }
}
  

Когда я ввожу следующие переменные во второй запрос, сервер Lighthouse возвращает мне следующее сообщение

 {
  "first": 1,
  "page": 1,
  "conditions": {"AND": {"column": "PRICE", "operator": "LTE","value": "190"}}
}
  

сообщение об ошибке

 Variable "$conditions" got invalid value {"AND":{"column":"PRICE","operator":"LTE","value":"190"}}; Expected type MyListingsWhereWhereConditions to be an object at value.AND.column.
  

Есть ли способ задать эти условия в переменной? Без этого я не мог найти способ изменить условие where на клиенте iOS.

Комментарии:

1. это не ошибка PHP, которая является неправильным запросом…

2. Может быть, опубликовать полный SDL типа ввода MyListingsWhereWhereConditions? Похоже, он ожидает, что значение для столбца будет объектом, а не перечислением.

3. И должен быть массив объектов

Ответ №1:

«И» должны содержать массив объектов, а не объект.

 "conditions": {"AND": [{"column": "PRICE", "operator": "LTE","value": "190"}}]