Към съдържанието

Схема

Схемите са незадължителни. Една схема изпълнява две независими задачи: валидира всеки запис и декларира кои полета получават индекси. Колекциите без схема приемат данни във всеки масив.

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

Името на колекцията в схемата трябва да съвпада с името на колекцията в хранилището; в противен случай конструирането завършва с грешка. Подаването на схемата на конструктора синхронизира декларираните индекси веднага.

Правила за валидиране

  • required полетата трябва да присъстват в записваните данни. Проверява се наличието: изрична стойност null удовлетворява задължително поле.
  • Типизираните полета се проверяват само когато присъстват и не са null. Поле от тип string отхвърля стойност int; поле от тип float приема както float, така и int.
  • Полетата mixed приемат всякакви стойности и са полезни, когато искате да обозначите поле като задължително или индексирано, без да ограничавате типа му.
  • Полетата, които не са декларирани в схемата, нямат ограничения.

Неуспешното валидиране предизвиква StorageException, преди да бъде записано каквото и да е.

Типове полета и флагове

Поддържани типове: string, int, float, bool, mixed.

Флагове за поле: index() (индекс за равенство), unique() (уникалността се налага при запис), range() (подреден индекс за gt/lt/between/prefix и заявки за подреден диапазон) и required().

Промени в схемата

Индексите се синхронизират при конструиране на хранилището. Ако промяна в схемата измени набора от декларирани индекси, манифестът на индексите се променя и засегнатите индекси се изграждат отново от съществуващите записи; промените в правилата за валидиране се прилагат само към бъдещи записи и никога не променят вече съхранените записи.

Същият обект Schema може да се използва повторно за задаване на типизирани колони в огледалото в SQL, включително за колекции, чието хранилище не използва самата схема.