Схема
Схемите са незадължителни. Една схема изпълнява две независими задачи: валидира всеки запис и декларира кои полета получават индекси. Колекциите без схема приемат данни във всеки масив.
$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, включително за колекции, чието хранилище не използва самата схема.