Schemat
Schematy są opcjonalne. Schemat pełni dwie niezależne funkcje: weryfikuje każdy zapis i deklaruje pola objęte indeksami. Kolekcje bez schematu akceptują dowolne dane w postaci tablicy.
$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);
Nazwa kolekcji w schemacie musi być zgodna z nazwą kolekcji w magazynie; w przeciwnym razie konstrukcja kończy się błędem. Przekazanie schematu do konstruktora powoduje też natychmiastową synchronizację zadeklarowanych indeksów.
Zasady walidacji
- Pola
requiredmuszą występować w zapisywanych danych. Sprawdzana jest obecność: jawnenullspełnia wymóg pola. - Pola typowane są sprawdzane tylko wtedy, gdy występują i nie mają wartości null. Pole typu
stringodrzuca wartośćint; pole typufloatakceptuje zarównofloat, jak iint. - Pola
mixedakceptują dowolną wartość; można ich użyć do oznaczenia pola jako wymaganego lub indeksowanego bez ograniczania jego typu. - Pola niezadeklarowane w schemacie nie podlegają ograniczeniom.
Nieudana walidacja powoduje zgłoszenie StorageException, zanim cokolwiek zostanie zapisane.
Typy pól i flagi
Obsługiwane typy: string, int, float, bool, mixed.
Flagi pola: index() (indeks równości), unique() (unikalność wymuszana podczas zapisu), range() (indeks uporządkowany dla gt/lt/between/prefix i zapytań o uporządkowany zakres) oraz required().
Zmiany schematu
Indeksy są synchronizowane podczas tworzenia magazynu. Jeśli zmiana schematu modyfikuje zestaw zadeklarowanych indeksów, zmienia się manifest indeksów, a indeksy, których dotyczy zmiana, są odbudowywane na podstawie istniejących rekordów; zmiany reguł walidacji dotyczą tylko przyszłych zapisów i nigdy nie modyfikują zapisanych rekordów.
Tego samego obiektu Schema można użyć do mapowania typowanych kolumn w mirrорze SQL mirror, także w kolekcjach, których magazyn
sam nie korzysta ze schematu.