web-dev-qa-db-ja.com

ループバックモデルで一意のフィールド値を確保する

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

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

私はそこでドキュメントや他の例を検索してみましたが、成功しませんでした。私が考えることができる1つの解決策は、create関数のremoteHookを作成し、挿入する前にこのフィールドを検証することですが、他の方法を探します。

18
Nishant

common/models/post.jsvalidation ルールを設定します

Post.validatesUniquenessOf('genericId');
24
IvanZh

一意性を実現するためのより良い方法かどうかはわかりませんが、 ここにあります モデルのインデックス作成に関するドキュメント。

必要なフィールドに一意のインデックスを追加するだけで完成です。

あなたのモデルの場合、それは次のようになります:

{
  ...
    "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
    },
 ...
}
27
Pandaiolo

Lookbackv4ソリューションは次のようになります。

@model()
export class Client extends Entity {

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

}

次に、スキーマを更新する必要があります。

npm run migrate

またはそれを再作成します:

npm run migrate -- --rebuild
4
Mathias Arens