Shema
Sheme niso obvezne. Shema opravlja dve neodvisni nalogi: preverja veljavnost vsakega zapisa in določa, katera polja dobijo indekse. Zbirke brez sheme sprejmejo podatke v katerem koli polju.
$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);
Ime zbirke v shemi se mora ujemati z imenom zbirke shrambe; sicer konstrukcija sproži napako. Če shemo posredujete konstruktorju, se deklarirani indeksi tudi takoj sinhronizirajo.
Pravila preverjanja
- Polja
requiredmorajo biti prisotna v zapisanih podatkih. Preverja se prisotnost: izrecna vrednostnullizpolnjuje zahtevo za polje. - Tipizirana polja se preverjajo samo, kadar so prisotna in niso null. Polje tipa
stringzavrne vrednostint; polje tipafloatsprejme takofloatkotint. - Polja
mixedsprejmejo kar koli; uporabna so za označevanje obveznega ali indeksiranega polja brez omejitve njegovega tipa. - Polja, ki niso navedena v shemi, niso omejena.
Neuspešno preverjanje veljavnosti sproži StorageException, preden se kar koli zapiše.
Vrste polj in zastavice
Podprte vrste: string, int, float, bool, mixed.
Zastavice za posamezna polja: index() (indeks enakosti), unique() (zagotovljena enoličnost ob zapisu), range() (urejeni indeks za gt/lt/between/prefix in poizvedbe z urejenim razponom) ter required().
Spremembe sheme
Indeksi se sinhronizirajo ob vzpostavitvi shrambe. Če sprememba sheme spremeni nabor deklariranih indeksov, se manifest indeksov spremeni, prizadeti indeksi pa se znova zgradijo iz obstoječih zapisov; spremembe pravil za preverjanje veljavnosti veljajo samo za prihodnje zapise in nikoli ne prepišejo shranjenih zapisov.
Isti objekt Schema lahko znova uporabite za preslikavo tipiziranih stolpcev v zrcalni kopiji SQL, tudi pri zbirkah, katerih shramba sama ne uporablja sheme.