Schemă
Schemele sunt opționale. O schemă are două roluri independente: validează fiecare scriere și declară câmpurile care primesc indexuri. Colecțiile fără schemă acceptă orice date de tip array.
$schema = Schema::collection('posts')
->string('slug')->unique()
->string('status')->index()
->int('publishedAt')->range()
->bool('featured')
->required(['slug', 'status']);
$posts = new DocStore($root, 'posts', schema: $schema);
Numele colecției din schemă trebuie să corespundă cu numele colecției din stocare; în caz contrar, construirea eșuează. Transmiterea schemei către constructor sincronizează imediat și indexurile declarate.
Reguli de validare
- Câmpurile
requiredtrebuie să fie prezente în datele scrise. Se verifică prezența: o valoare explicitănullsatisface cerința pentru un câmp obligatoriu. - Câmpurile tipizate sunt verificate doar când sunt prezente și nu au valoarea null. Un câmp
stringrespinge o valoareint; un câmpfloatacceptă atâtfloat, cât șiint. - Câmpurile
mixedacceptă orice valoare și sunt utile pentru a marca un câmp drept obligatoriu sau indexat, fără a-i restricționa tipul. - Câmpurile nedeclarate în schemă nu au restricții.
O validare eșuată declanșează o eroare StorageException înainte de orice scriere.
Tipuri și flag-uri pentru câmpuri
Tipuri acceptate: string, int, float, bool, mixed.
Flag-uri pentru fiecare câmp: index() (index de egalitate), unique() (unicitatea este impusă la scriere), range() (index ordonat pentru gt/lt/between/prefix și interogări ordonate pe intervale) și required().
Modificări ale schemei
Indexurile sunt sincronizate la construirea stocării. Dacă o modificare a schemei schimbă setul de indexuri declarate, manifestul indexurilor se modifică, iar indexurile afectate sunt reconstruite din înregistrările existente; modificările regulilor de validare se aplică doar scrierilor viitoare și nu rescriu niciodată înregistrările stocate.
Același obiect Schema poate fi reutilizat pentru maparea coloanelor tipizate într-o oglindă SQL, inclusiv pentru colecțiile a căror stocare nu folosește schema respectivă.