Treci la conținut

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.

PHP
$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 required trebuie să fie prezente în datele scrise. Se verifică prezența: o valoare explicită null satisface 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 string respinge o valoare int; un câmp float acceptă atât float, cât și int.
  • Câmpurile mixed acceptă 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ă.