Ответ 1
Установите правило проверки в common/models/post.js
Post.validatesUniquenessOf('genericId');
Как обеспечить уникальность конкретного поля в модели loopback. Как показано ниже, модель Post, у меня есть поле genericId в нем, я хочу, чтобы он был уникальным в базе данных и loopback через ошибку при дублировании ввода ключа.
{
"name": "Post",
"plural": "Post",
"base": "PersistedModel",
"properties": {
"genericId": {
"type": "string",
"required":True
},
"moderatedAt": {
"type": "date"
}
},
"validations": [],
"acls": [],
"methods": []
}
Я попытался найти там документацию и другие примеры, но не успел. Одним из решений, о котором я могу думать, является создание remoteHook для функции create и проверка этого поля перед вставкой, но поиск другого пути.
Установите правило проверки в common/models/post.js
Post.validatesUniquenessOf('genericId');
Не уверен, что это лучший способ добиться уникальности, но вы можете найти здесь документы об индексировании вашей модели.
Просто добавьте уникальный индекс в нужное поле и вуаля!
Для вашей модели это будет:
{
...
"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
},
...
}
Решение 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