20

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

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

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

4

3 回答 3

30

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

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

对于您的模型,这将是:

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

但是,如果该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
    },
 ...
}
于 2014-09-19T14:20:00.960 回答
27

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

Post.validatesUniquenessOf('genericId');
于 2014-11-26T12:23:37.197 回答
10

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
于 2019-02-10T04:56:27.380 回答