How to ensure uniqueness of a particular field in loopback model. Like below is the model Post, I have a field genericId in it, I want it to be unique in the database, and loopback to through an error, on duplicate key insertion.
{
"name": "Post",
"plural": "Post",
"base": "PersistedModel",
"properties": {
"genericId": {
"type": "string",
"required":True
},
"moderatedAt": {
"type": "date"
}
},
"validations": [],
"acls": [],
"methods": []
}
I have tried searching there documentation, and other examples but no success. One solution which I can think of is, to create a remoteHook for the create function, and validate this field before inserting, but looking for some other way.
A LoopBack model is a JavaScript object with both Node and REST APIs that represents data in backend systems such as databases. Models are connected to backend systems via data sources. You use the model APIs to interact with the data source to which it is attached.
PersistedModel is the base class for models connected to persistent data sources such as databases and is also the base class for all built-in models (except Email). It provides all the standard create, read, update, and delete (CRUD) operations and exposes REST endpoints for them.
Not sure if it is the better way to achieve uniqueness, but you can find here the docs about indexing your model.
Just add a unique index on the field you want, and voila !
For your model, that would be :
{
...
"genericId": {
"type": "string",
"required": True,
"index": {"unique": true}
},
...
}
However, if the genericId
field is the actual Id of the model, I suggest you declare it as such, so you can use findById
method, and also avoid creation of a duplicate id
field, which will happen if you don't declare any in your model.
{
...
"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
},
...
}
Set validation rule in your common/models/post.js
Post.validatesUniquenessOf('genericId');
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With