Подтвердить что ты не робот

Обеспечение уникального значения поля в кольцевой модели

Как обеспечить уникальность конкретного поля в модели loopback. Как показано ниже, модель Post, у меня есть поле genericId в нем, я хочу, чтобы он был уникальным в базе данных и loopback через ошибку при дублировании ввода ключа.

{
  "name": "Post",
  "plural": "Post",
  "base": "PersistedModel",
  "properties": {
    "genericId": {
      "type": "string",
      "required":True 
    },
    "moderatedAt": {
      "type": "date"
    }
  },
  "validations": [],
  "acls": [],
  "methods": []
}

Я попытался найти там документацию и другие примеры, но не успел. Одним из решений, о котором я могу думать, является создание remoteHook для функции create и проверка этого поля перед вставкой, но поиск другого пути.

4b9b3361

Ответ 2

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

Просто добавьте уникальный индекс в нужное поле и вуаля!

Для вашей модели это будет:

{
  ...
    "genericId": {
      "type": "string",
      "required": True,
      "index": {"unique": true} 
    },
 ...
}

Однако, если поле genericId является фактическим идентификатором модели, я предлагаю вам объявить его как таковой, поэтому вы можете использовать метод findById, а также не создавать дублирующее поле id, которое будет произойдет, если вы не объявите какие-либо в своей модели.

{
  ...
    "genericId": {
      "type": "string", 
      "id": true,       // Ensure uniqueness and avoid another model id field
      "generated": true // Add this if you want Loopback to manage id content for you
    },
 ...
}

Ответ 3

Решение Lookback v4 выглядит следующим образом:

@model()
export class Client extends Entity {

  @property({
    type: 'string',
    required: true,
    index: {
      unique: true,
    },
  })
  name: string;

}

Затем вы должны обновить свою схему:

npm run migrate

или воссоздать его:

npm run migrate -- --rebuild