Preskoči na vsebino

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.

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

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 required morajo biti prisotna v zapisanih podatkih. Preverja se prisotnost: izrecna vrednost null izpolnjuje zahtevo za polje.
  • Tipizirana polja se preverjajo samo, kadar so prisotna in niso null. Polje tipa string zavrne vrednost int; polje tipa float sprejme tako float kot int.
  • Polja mixed sprejmejo 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.