Сгенерированное автоматически поле увеличения для призмы - PullRequest
3 голосов
/ 05 марта 2019

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

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

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

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

1 Ответ

1 голос
/ 12 марта 2019

В настоящее время вы не можете иметь автоматически генерируемые инкрементные поля в 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 символов или с использованием библиотеки . (Это устранит необходимость для дополнительного запроса, но случайность может иметь удивительное поведение)

...