Перейти до вмісту

Схема

Схеми необов’язкові. Схема виконує дві незалежні функції: перевіряє кожен запис і вказує поля, для яких створюються індекси. Колекції без схеми приймають дані будь-яких масивів.

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, зокрема для колекцій, сховище яких саме не використовує цю схему.