Невозможно выполнить запрос по диапазону дат, не получая результатов каждый раз - PullRequest
0 голосов
/ 29 января 2019

Мне трудно понять, почему я продолжаю получать 0 результатов из запроса, который пытаюсь выполнить.В основном я пытаюсь вернуть только результаты в диапазоне дат.На данной таблице у меня есть createdAt, который является скаляром DateTime.В основном это автоматически заполняется из призмы (или graphql, не уверен, какие из них устанавливает это).Таким образом, в любой таблице у меня есть createAt, который является строкой DateTime, представляющей DateTime, когда он был создан.

Вот моя схема для данной таблицы:

type Audit {
    id: ID! @unique
    user: User!
    code: AuditCode!
    createdAt: DateTime!
    updatedAt: DateTime!
    message: String
}

Я запросил эту таблицу ивернув некоторые результаты, я поделюсь ими здесь:

"getAuditLogsForUser": [
      {
        "id": "cjrgleyvtorqi0b67jnhod8ee",
        "code": {
          "action": "login"
        },
        "createdAt": "2019-01-28T17:14:30.047Z"
      },
      {
        "id": "cjrgn99m9osjz0b67568u9415",
        "code": {
          "action": "adminLogin"
        },
        "createdAt": "2019-01-28T18:06:03.254Z"
      },
      {
        "id": "cjrgnhoddosnv0b67kqefm0sb",
        "code": {
          "action": "adminLogin"
        },
        "createdAt": "2019-01-28T18:12:35.631Z"
      },
      {
        "id": "cjrgnn6ufosqo0b67r2tlo1e2",
        "code": {
          "action": "login"
        },
        "createdAt": "2019-01-28T18:16:52.850Z"
      },
      {
        "id": "cjrgq8wwdotwy0b67ydi6bg01",
        "code": {
          "action": "adminLogin"
        },
        "createdAt": "2019-01-28T19:29:45.616Z"
      },
      {
        "id": "cjrgqaoreoty50b67ksd04s2h",
        "code": {
          "action": "adminLogin"
        },
        "createdAt": "2019-01-28T19:31:08.382Z"
      }]

Вот мое getAuditLogsForUser определение схемы

getAuditLogsForUser(userId: String!, before: DateTime, after: DateTime): [Audit!]!

Так что для тестирования я хотел бы получить все результаты вмежду последним и первым.

2019-01-28T19:31:08.382Z последний 2019-01-28T17:14:30.047Z первый.

Вот мой код, который будет вставлен в оператор запроса:

if (args.after && args.before) {
                where['createdAt_lte'] = args.after;
                where['createdAt_gte'] = args.before;
            }

            console.log(where)

            return await context.db.query.audits({ where }, info);

На игровой площадке я выполняю этот оператор

getAuditLogsForUser(before: "2019-01-28T19:31:08.382Z" after: "2019-01-28T17:14:30.047Z") { id code { action } createdAt }

Итак, я хочу, чтобы все, что createAt_lte (меньше или равно), установленное в 2019-01-28T17:14:30.047Z, и что createAt_gte (больше или равно), установленное в 2019-01-28T19:31:08.382Z

Однако я не получаю буквально никаких результатов, хотя мы ЗНАЕМ, что есть результаты.

Я попытался найти некоторую документацию по DateTime скаляру на веб-сайте graphql.Я буквально не мог ничего найти на нем, но я вижу это в своей сгенерированной призменной схеме.Это просто определяется как Скаляр.Ничего особенного в этом нет.Я не думаю, что я определяю это в другом месте.Я использую Graphql-йогу, если это имеет какое-либо значение.

(созданный файл призмы)scalar DateTime

Мне интересно, действительно ли он воспринимает это как настоящее время?Должно быть, потому что она генерируется в виде строки ISO DateTime в UTC.

Просто трудно понять, в чем заключается моя проблема в данный момент, может быть, мне нужно определить ее каким-то другим способом?Любая помощь приветствуется

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Извините, я неправильно прочитал ваш пример в своем первом ответе.Это то, что вы попробовали на детской площадке правильно?

getAuditLogsForUser(
   before: "2019-01-28T19:31:08.382Z",
   after: "2019-01-28T17:14:30.047Z"
  ){ 
  id 
  code { action }
  createdAt 
}

Это не будет работать, поскольку до и после не относятся ко времени, но используются курсоры для разбиения на страницы.Они ожидают идентификатора.Поскольку идентификаторы также являются строками, этот запрос не выдает ошибку, но ничего не найдет.Вот как используется разбиение на страницы: https://www.prisma.io/docs/prisma-graphql-api/reference/queries-qwe1/#pagination

Я думаю, вы хотите использовать фильтр в запросе.Для этого вы можете использовать аргумент where.Запрос будет выглядеть так:

getAuditLogsForUser(
      where:{AND:[
           {createdAt_lte: "2019-01-28T19:31:08.382Z"},
           {createdAt_gte: "2019-01-28T17:14:30.047Z"}
         ]}
   ) {
     id 
     code { action } 
     createdAt 
}

Вот документы для фильтрации: https://www.prisma.io/docs/prisma-graphql-api/reference/queries-qwe1/#filtering

0 голосов
/ 30 января 2019

ОК, так что понял, что это связано с тем фактом, что я использовал «после» и «до» в качестве переменной аргумента.Я понятия не имею, почему это полностью облажается, но это просто не даст ЛЮБЫХ результатов, если у вас есть это в качестве аргумента.Очень странно.Должно быть каким-то образом абстрагироваться от какой-то другой переменной, возможно, это ошибка в конце graphql.

Как только я попробовал новое имя переменной, альт, она работает.

...