web-dev-qa-db-fra.com

Assurer une valeur de champ unique dans le modèle de bouclage

Comment assurer l'unicité d'un champ particulier dans le modèle de bouclage. Comme ci-dessous est le modèle Post, j'ai un champ genericId dans celui-ci, je veux qu'il soit unique dans la base de données, et le bouclage par erreur duplication de clé.

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

J'ai essayé de chercher dans la documentation et d'autres exemples, mais sans succès. Une solution à laquelle je peux penser est de créer un remoteHook pour la fonction de création et de valider ce champ avant de l'insérer, mais en cherchant un autre .

16
Nishant

Définir validation rule dans votre common/models/post.js

Post.validatesUniquenessOf('genericId');
22
IvanZh

Vous ne savez pas si c'est le meilleur moyen de réaliser l'unicité, mais vous pouvez trouver ici la documentation sur l'indexation de votre modèle.

Ajoutez simplement un index unique sur le champ que vous voulez et le tour est joué!

Pour votre modèle, ce serait:

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

Cependant, si le champ genericId est l'ID actuel du modèle, je vous suggère de le déclarer comme tel, afin que vous puissiez utiliser la méthode findById et éviter la création d'un champ dupliqué id, ce qui se produira si vous n'en déclarez aucune dans votre modèle.

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

La solution Lookback v4 ressemble à ceci:

@model()
export class Client extends Entity {

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

}
0
Mathias Arens