Json 确保环回模型中的字段值唯一
如何确保环回模型中特定字段的唯一性。 就像下面的模型文章一样,我在其中有一个字段genericId,我希望它在数据库中是唯一的,并且在重复密钥插入时通过一个错误返回到Json 确保环回模型中的字段值唯一,json,node.js,strongloop,loopbackjs,Json,Node.js,Strongloop,Loopbackjs,如何确保环回模型中特定字段的唯一性。 就像下面的模型文章一样,我在其中有一个字段genericId,我希望它在数据库中是唯一的,并且在重复密钥插入时通过一个错误返回到 { "name": "Post", "plural": "Post", "base": "PersistedModel", "properties": { "genericId": { "type": "string", "required":True }, "mo
{
"name": "Post",
"plural": "Post",
"base": "PersistedModel",
"properties": {
"genericId": {
"type": "string",
"required":True
},
"moderatedAt": {
"type": "date"
}
},
"validations": [],
"acls": [],
"methods": []
}
我曾尝试在那里搜索文档和其他示例,但没有成功。
我能想到的一个解决方案是,为create函数创建一个remoteHook,并在插入之前验证此字段,但寻找其他方法。不确定这是否是实现唯一性的更好方法,但文档中介绍了如何为模型编制索引
{
...
"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
},
...
}
只要在你想要的字段上添加一个唯一的索引,瞧
对于您的模型,这将是:
{
...
"genericId": {
"type": "string",
"required": True,
"index": {"unique": true}
},
...
}
但是,如果genericId
字段是模型的实际Id,我建议您将其声明为实际Id,这样您就可以使用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
},
...
}
在common/models/post.js中设置规则
Post.validatesUniquenessOf('genericId');
回溯v4解决方案如下所示:
@model()
export class Client extends Entity {
@property({
type: 'string',
required: true,
index: {
unique: true,
},
})
name: string;
}
然后必须更新您的架构:
npm run migrate
或者重新创建它:
npm run migrate -- --rebuild
您还可以直接在数据库上强制唯一性是的,Strongloop的LoopbackJS文档非常糟糕。感谢您的解决方案,但我们已经得到了它,很抱歉忘记在此处更新。正确的验证文档仅支持连接器:内存中,Oracle或MongoDBWhat,如果我想保持字段组合的唯一性,您可以花费“…声明为这样”吗?谢谢。注意:这是一篇旧文章,不确定它是否仍然有效。在上面的消息中,代码对解释进行了扩展:通过在字段json定义中设置ID
prop(到true
),将字段声明为模型ID。是否更新了架构npm run migrate
或npm run migrate--rebuild
?并非每个连接器都支持此功能。我查了一下PostgreSQL。我想MySQL也是受支持的。