Автоматически сгенерированное поле увеличения для призмы

Я создал объект под названием Order в моем datamodel.prisma файле. там должно быть автоматически генерируемое поле с именем orderRef. который должен иметь автоматически сгенерированное инкрементное значение для поля createOrder сущности Order для каждого вызова мутации.

для первого Order значение поля 'orderRef' должно быть OD1, для второго Order должно быть значение OD2 для поля 'orderRef' и так далее. например:

(OD1, OD2, ....... OD124, ..... )

Как проще всего этого добиться? да значение должно быть String, а не Number.


person Dulara Malindu    schedule 05.03.2019    source источник


Ответы (1)


В настоящее время в Prisma нельзя использовать автоматически генерируемые увеличивающиеся поля. Однако существует RFC о поведении полей, который позволяет использовать такую ​​функцию в будущее.

В настоящее время есть 3 альтернативы:

1 / При создании узла выполните запрос, чтобы получить последний узел того же типа и увеличить последнее значение на единицу.

query {
  things(orderBy: createdAt_desc, first: 1) {
    myId
  }
}

...
newId = myId + 1
...

mutation {
  createThing(data: {myId: newId, ... }) {
    ...
  }
}

2 / При создании узла выполните запрос на агрегирование, чтобы получить количество всех узлов одного типа и увеличивать его в зависимости от количества. (Однако, если вы удалите предыдущие узлы, вы можете оказаться иметь одно и то же значение несколько раз.)

query {
  thingsConnection {
    aggregate {
      count
    }
  }
}
...
newId = count + 1
...

mutation {
  createThing(data: {myId: newId, ... }) {
    ...
  }
}

3 / Если вам нужен удобочитаемый идентификатор для вашего пользователя, рассмотрите возможность создания случайной длинной строки из 6 символов или с использованием библиотеки. (это устранит необходимость в дополнительном запросе, но случайность может иметь неожиданное поведение)

person Errorname    schedule 12.03.2019
comment
Спасибо.! Я также потратил много времени на поиски ответа на этот вопрос. Я верю в ваше первое решение как в лучшее решение, которое есть на данный момент. Поскольку клиент может удалять существующие заказы, я не могу использовать второе решение, хотя оно кажется самым простым для реализации. и в нашей системе будет значительное количество заказов. Случайная строка из 6 букв может не подойти. Решил продолжить с вашего первого ответа. - person Dulara Malindu; 14.03.2019