Schéma
Schémy sú voliteľné. Schéma plní dve nezávislé úlohy: overuje každý zápis a deklaruje, ktoré polia získajú indexy. Kolekcie bez schémy prijímajú údaje v ľubovoľnom formáte poľa.
$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);
Názov kolekcie v schéme sa musí zhodovať s názvom kolekcie v úložisku; inak vytvorenie zlyhá. Odovzdaním schémy konštruktoru sa tiež okamžite zosynchronizujú deklarované indexy.
Pravidlá overovania
- V poliach
requiredmusí byť vo zapisovaných údajoch uvedená hodnota. Kontroluje sa prítomnosť: explicitná hodnotanullspĺňa požiadavku na povinné pole. - Typované polia sa kontrolujú iba vtedy, keď sú prítomné a nemajú hodnotu null. Pole typu
stringodmieta hodnotuint; pole typufloatprijíma hodnotyfloatajint. - Polia
mixedprijímajú ľubovoľnú hodnotu a hodia sa na označenie povinného alebo indexovaného poľa bez obmedzenia jeho typu. - Polia, ktoré nie sú deklarované v schéme, nemajú žiadne obmedzenia.
Neúspešné overenie vyvolá StorageException ešte pred zápisom.
Typy polí a príznaky
Podporované typy: string, int, float, bool, mixed.
Príznaky pre jednotlivé polia: index() (index rovnosti), unique() (jedinečnosť vynucovaná
pri zápise), range() (zoradený index pre gt/lt/between/prefix a
zoradené rozsahové dotazy) a required().
Zmeny schémy
Indexy sa synchronizujú pri vytvorení úložiska. Ak zmena schémy upraví množinu deklarovaných indexov, zmení sa manifest indexov a dotknuté indexy sa znova vytvoria z existujúcich záznamov. Zmeny pravidiel overovania platia iba pre budúce zápisy a nikdy neprepíšu uložené záznamy.
Ten istý objekt Schema možno opakovane použiť na mapovanie typovaných stĺpcov v zrkadle SQL, a to aj pre kolekcie, ktorých úložisko túto schému samo nepoužíva.