Schema
Skemaer er valgfrie. Et skema har to uafhængige funktioner: det validerer hver skrivning, og det angiver, hvilke felter der får indekser. Samlinger uden et skema accepterer alle arraydata.
$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);
Skemaets samlingsnavn skal svare til lagerets samlingsnavn; ellers kastes der en fejl ved oprettelse. Når skemaet gives til konstruktøren, synkroniseres de erklærede indekser med det samme.
Valideringsregler
required-felter skal være til stede i de data, der skrives. Det er tilstedeværelsen, der kontrolleres: en udtrykkelignullopfylder kravet.- Typede felter kontrolleres kun, når de findes og ikke er null. Et
string-felt afviser enint-værdi; etfloat-felt accepterer bådefloatogint. mixed-felter accepterer alt og er nyttige til at markere et felt som påkrævet eller indekseret uden at begrænse dets type.- Felter, der ikke er erklæret i skemaet, er ubegrænsede.
En mislykket validering kaster en StorageException, før der skrives noget.
Felttyper og flag
Understøttede typer: string, int, float, bool, mixed.
Flag pr. felt: index() (lighedsindeks), unique() (unikhed håndhæves
ved skrivning), range() (ordnet indeks til gt/lt/between/prefix og
ordnede intervalforespørgsler) samt required().
Ændringer af skemaet
Indekser synkroniseres, når lageret oprettes. Hvis en skemaændring ændrer mængden af erklærede indekser, ændres indeksmanifestet, og de berørte indekser genopbygges ud fra de eksisterende poster; ændringer af valideringsregler gælder kun fremtidige skrivninger og omskriver aldrig gemte poster.
Det samme Schema-objekt kan genbruges til at knytte typede kolonner i et
SQL-spejl, også for samlinger, hvis lager ikke selv bruger skemaet.