20

ループバック モデルで特定のフィールドの一意性を確保する方法。以下のようにモデル Post があります。フィールドには genericId があり、データベース内で一意であり、重複キーの挿入時にエラーを介してループバックする必要があります。

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

ドキュメントや他の例を検索してみましたが、成功しませんでした。私が考えることができる 1 つの解決策は、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

ルックバック 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 に答える