2014-09-19 12 views
13

Sposób zapewnienia unikalności określonego pola w modelu sprzężenia zwrotnego. Podobnie jak poniżej jest model Post, mam pole genericId w nim, chcę, aby był unikalny w bazie danych, i pętli zwrotnej do przez błąd, na duplikacie wstawiania klucza.Zapewnienie unikalnej wartości pola w modelu sprzężenia zwrotnego

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

Próbowałem przeszukać dokumentację i inne przykłady, ale bez powodzenia. Jednym z rozwiązań, o których mogę pomyśleć, jest stworzenie funkcji remoteHook dla funkcji tworzenia i zatwierdzenie tego pola przed wstawieniem, ale poszukiwanie innego sposobu.

+0

można również wymusić unikalność na bazie danych bezpośrednio – Ravi

+1

Tak, dokumentacja LoopbackJS Strongloop jest niemożliwie nieszczęśliwy. – Green

Odpowiedz

15

Set validation reguła w common/models/post.js

Post.validatesUniquenessOf('genericId'); 
+0

Dzięki za rozwiązanie, ale już go masz, przepraszam, zapomniałem go zaktualizować tutaj. – Nishant

+1

Prawidłowe dokumenty sprawdzania poprawności https://docs.strongloop.com/display/APIC/Validating+model+data – EFernandes

+3

Obsługiwane są tylko obsługiwane złącza: In Memory, Oracle lub MongoDB – EFernandes

20

Nie jestem pewien, czy jest to lepszy sposób na uzyskanie unikalności, ale także na temat indeksowania modelu.

Po prostu dodaj unikatowy indeks na żądanym polu i voila!

dla danego modelu, który byłby:

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

Jednakże, jeśli pole genericId jest rzeczywisty identyfikator modelu, proponujemy zadeklarować je jako takie, dzięki czemu można używać findById metody, a także unikaj tworzenia zduplikowanego pola id, co stanie się, jeśli nie zadeklarujesz żadnych w swoim modelu.

{ 
    ... 
    "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

Czy możesz wydać na "... zadeklarować to jako takie"? Dzięki. – CNSKnight

+0

* Uwaga: jest to stary post, nie wiem, czy nadal jest ważny *. W powyższym komunikacie kod rozwija się na wyjaśnienie: deklarujesz pole jako identyfikator modelu, ustawiając 'id' prop (na' true') w definicji pola json. – Pandaiolo

Powiązane problemy