Přejít k obsahu

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.

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

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 required musí být v zapisovaných datech přítomna. Kontroluje se přítomnost: výslovné null splňuje požadavek na povinné pole.
  • Typovaná pole se kontrolují, jen když jsou přítomna a nemají hodnotu null. Pole typu string odmítá hodnotu int; pole typu float přijímá obě hodnoty float a int.
  • Pole typu mixed př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á.