Схема
Схеми необов’язкові. Схема виконує дві незалежні функції: перевіряє кожен запис і вказує поля, для яких створюються індекси. Колекції без схеми приймають дані будь-яких масивів.
$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, зокрема для колекцій, сховище яких
саме не використовує цю схему.