Schéma
Schémata jsou volitelná. Schéma plní dva nezávislé úkoly: ověřuje každý zápis a deklaruje, která pole mají indexy. Kolekce bez schématu přijímají libovolná data ve formě pole.
$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ázev kolekce ve schématu se musí shodovat s názvem kolekce v úložišti; jinak konstrukce vyvolá chybu. Předáním schématu konstruktoru se také okamžitě synchronizují deklarované indexy.
Pravidla ověřování
- Pole
requiredmusí být v zapisovaných datech přítomna. Kontroluje se přítomnost: výslovnénullsplňuje požadavek na povinné pole. - Typovaná pole se kontrolují, jen když jsou přítomna a nemají hodnotu null. Pole typu
stringodmítá hodnotuint; pole typufloatpřijímá obě hodnotyfloataint. - Pole typu
mixedpřijímají cokoli a hodí se k označení povinného nebo indexovaného pole bez omezení jeho typu. - Pole, která nejsou ve schématu deklarována, nejsou nijak omezena.
Neúspěšné ověření vyvolá chybu StorageException dříve, než se cokoli zapíše.
Typy polí a příznaky
Podporované typy: string, int, float, bool, mixed.
Příznaky pro jednotlivá pole: index() (index rovnosti), unique() (jedinečnost vynucovaná při zápisu), range() (uspořádaný index pro gt/lt/between/prefix a dotazy na uspořádané rozsahy) a required().
Změny schématu
Indexy se synchronizují při konstrukci úložiště. Pokud změna schématu upraví deklarovanou sadu indexů, změní se manifest indexů a dotčené indexy se znovu sestaví ze stávajících záznamů. Změny validačních pravidel se použijí pouze na budoucí zápisy a nikdy nepřepisují uložené záznamy.
Stejný objekt Schema lze znovu použít k mapování typovaných sloupců v zrcadle SQL, včetně kolekcí, jejichž úložiště samo toto schéma nepoužívá.