2014-09-19 12 views
13

Come garantire l'unicità di un campo particolare nel modello di loopback. Come di seguito è il post del modello, ho un campo generico in esso, voglio che sia univoco nel database, e loopback a attraverso un errore, sull'inserimento della chiave duplicato.Garantire un valore di campo univoco nel modello di loopback

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

Ho provato a cercare la documentazione e altri esempi, ma senza successo. Una soluzione a cui posso pensare è creare un remoteHook per la funzione create e convalidare questo campo prima di inserirlo, ma cercando un altro modo.

+0

si può anche far rispettare l'unicità sul database direttamente – Ravi

+1

Sì, di Strongloop documentazione LoopbackJS è incredibilmente infelice. – Green

risposta

15

Set validation regola nel tuo common/models/post.js

Post.validatesUniquenessOf('genericId'); 
+0

Grazie per la soluzione, ma ce l'hanno già, scusa ho dimenticato di aggiornarlo qui. – Nishant

+1

Documenti di validazione corretti https://docs.strongloop.com/display/APIC/Validating+model+data – EFernandes

+3

Solo connettori supportati: In memoria, Oracle o MongoDB – EFernandes

20

Non sono sicuro se sia il modo migliore per ottenere univocità, ma you can find here i documenti sull'indicizzazione del modello.

Basta aggiungere un indice univoco sul campo desiderato e voilà!

per il vostro modello, che sarebbe:

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

Tuttavia, se il campo genericId è il vero Id del modello, vi consiglio si dichiara come tale, in modo da poter utilizzare findById metodo, e anche evitare la creazione di un duplicato del campo id, che avverrà se non ne dichiarate alcuno nel modello.

{ 
    ... 
    "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 
    }, 
... 
} 
+0

Potresti spendere per "... dichiararlo come tale"? Grazie. – CNSKnight

+0

* Nota: questo è un vecchio post, non so se è ancora valido *. Nel messaggio precedente, il codice si espande sulla spiegazione: si dichiara un campo come ID di un modello impostando il puntello 'id' (su' true') nel campo definizione json. – Pandaiolo

Problemi correlati