Gå til indhold

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.

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);

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 udtrykkelig null opfylder kravet.
  • Typede felter kontrolleres kun, når de findes og ikke er null. Et string-felt afviser en int-værdi; et float-felt accepterer både float og int.
  • 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.