确保环回模型中的唯一字段值

Nis*_*ant 18 json node.js strongloop loopbackjs

如何确保环回模型中特定字段的唯一性.下面是模型Post,我在其中有一个字段genericId,我希望它在数据库中是唯一的,并且在重复键插入时循环到错误.

{
  "name": "Post",
  "plural": "Post",
  "base": "PersistedModel",
  "properties": {
    "genericId": {
      "type": "string",
      "required":True 
    },
    "moderatedAt": {
      "type": "date"
    }
  },
  "validations": [],
  "acls": [],
  "methods": []
}
Run Code Online (Sandbox Code Playgroud)

我试过在那里搜索文档和其他示例但没有成功.我能想到的一个解决方案是,为create函数创建一个remoteHook,并在插入之前验证这个字段,但是寻找其他方法.

Pan*_*olo 26

不确定它是否是实现唯一性的更好方法,但您可以在此处找到有关索引模型的文档.

只需在您想要的字段上添加一个唯一索引,瞧!

对于您的模型,那将是:

{
  ...
    "genericId": {
      "type": "string",
      "required": True,
      "index": {"unique": true} 
    },
 ...
}
Run Code Online (Sandbox Code Playgroud)

但是,如果该genericId字段是模型的实际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
    },
 ...
}
Run Code Online (Sandbox Code Playgroud)


Iva*_*nZh 24

在您的中设置验证规则common/models/post.js

Post.validatesUniquenessOf('genericId');
Run Code Online (Sandbox Code Playgroud)

  • 仅支持的连接器:内存,Oracle或MongoDB (5认同)
  • 正确的验证文档 https://docs.strongloop.com/display/APIC/Validating+model+data (2认同)
  • 如果我想使字段组合保持唯一性怎么办? (2认同)

Mat*_*ens 8

Lookback v4 解决方案如下所示:

@model()
export class Client extends Entity {

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

}
Run Code Online (Sandbox Code Playgroud)

然后你必须更新你的架构:

npm run migrate
Run Code Online (Sandbox Code Playgroud)

或重新创建它:

npm run migrate -- --rebuild
Run Code Online (Sandbox Code Playgroud)