ループバックモデルで特定のフィールドの一意性を確保する方法。以下のモデルPostのように、genericIdフィールドがあり、データベース内で一意であり、重複キーの挿入時にエラーを介してループバックする必要があります。
{
"name": "Post",
"plural": "Post",
"base": "PersistedModel",
"properties": {
"genericId": {
"type": "string",
"required":True
},
"moderatedAt": {
"type": "date"
}
},
"validations": [],
"acls": [],
"methods": []
}
私はそこでドキュメントや他の例を検索してみましたが、成功しませんでした。私が考えることができる1つの解決策は、create関数のremoteHookを作成し、挿入する前にこのフィールドを検証することですが、他の方法を探します。
common/models/post.js
に validation ルールを設定します
Post.validatesUniquenessOf('genericId');
一意性を実現するためのより良い方法かどうかはわかりませんが、 ここにあります モデルのインデックス作成に関するドキュメント。
必要なフィールドに一意のインデックスを追加するだけで完成です。
あなたのモデルの場合、それは次のようになります:
{
...
"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
},
...
}
Lookbackv4ソリューションは次のようになります。
@model()
export class Client extends Entity {
@property({
type: 'string',
required: true,
index: {
unique: true,
},
})
name: string;
}
次に、スキーマを更新する必要があります。
npm run migrate
またはそれを再作成します:
npm run migrate -- --rebuild