Как получить только отфильтрованные данные из запроса Prisma / GraphQL

У меня есть 2 набора данных (пользователи и события) в отношении "многие ко многим". Я использую следующий запрос для извлечения и фильтрации данных.

{
  events(
    where: {
      AND: [
        { location: { name: "Test" } }
        {
          time: {
            startDate_lt: "2018-12-03T13:46:13.021Z"
            endDate_gt: "2018-12-03T13:46:13.021Z"
          }
        }
        {
          participantList_some: {
            participant: { firstName: "Lorem", lastName: "Ipsum" }
          }
        }
      ]
    }

  ) {
    participantList {
      participant {
        firstName
        lastName
      }
    }
    location {
      name
    }
  }
}

Пока все хорошо, я получаю следующий результат:

{
  "data": {
    "events": [
      {
        "participantList": [
          {
            "participant": {
              "firstName": "Chuck",
              "lastName": "Norris"
            }
          },
          {
            "participant": {
              "firstName": "Lorem",
              "lastName": "Ipsum"
            }
          }
        ],
        "location": {
          "name": "Test"
        }
      }
    ]
  }
}

Я бы хотел получить только отфильтрованного участника, т.е. «Lorem Ipsum». Таким образом, я получу всех (2) участников этого мероприятия. Итак, мой желаемый результат:

{
  "data": {
    "events": [
      {
        "participantList": [
          {
            "participant": {
              "firstName": "Lorem",
              "lastName": "Ipsum"
            }
          }
        ],
        "location": {
          "name": "Test"
        }
      }
    ]
  }
}

На данный момент я отфильтровываю нежелательные данные из кода. Я искал, как и могу ли я сделать это с помощью запроса или дополнительных параметров, но не нашел ничего полезного. Любая помощь или руководство приветствуются.


person Dan D.    schedule 03.12.2018    source источник


Ответы (1)


Вы можете добавить фильтр в любое поле запроса. Это означает, что вы можете фильтровать участников найденных вами событий:

{
  events(
    where: {
      AND: [
        { location: { name: "Test" } }
        {
          time: {
            startDate_lt: "2018-12-03T13:46:13.021Z"
            endDate_gt: "2018-12-03T13:46:13.021Z"
          }
        }
        {
          participantList_some: {
            participant: { firstName: "Lorem", lastName: "Ipsum" }
          }
        }
      ]
    }

  ) {
    participantList (where: { participant: { firstName: "Lorem", lastName: "Ipsum" } }) {
      participant {
        firstName
        lastName
      }
    }
    location {
      name
    }
  }
}
person Errorname    schedule 04.12.2018
comment
Спасибо @Errorname за ответ, однако я получаю сообщение об ошибке, когда добавляю этот оператор where. Там написано "Cannot return null for non-nullable type (line 4, column 7):\n participant(where: {firstName: \"Lorem\", lastName: \"Ipsum\"}). - person Dan D.; 04.12.2018
comment
Ой. Похоже, это противоречит вашей схеме. Не могли бы вы предоставить соответствующую часть вашей схемы? - person Errorname; 04.12.2018
comment
Фактически это сработало, добавив условие where на уровне participantList, например: participantList(where: { participant: { firstName: "Lorem", lastName: "Ipsum" } }) - person Dan D.; 04.12.2018