Shēma
Shēmas nav obligātas. Shēmai ir divi neatkarīgi uzdevumi: tā validē katru ierakstīšanas darbību un deklarē, kuri lauki saņem indeksus. Kolekcijas bez shēmas pieņem jebkādus masīva datus.
$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);
Shēmas kolekcijas nosaukumam jāsakrīt ar krātuves kolekcijas nosaukumu; pretējā gadījumā, veidojot krātuvi, tiek izraisīta kļūda. Nododot shēmu konstruktoram, deklarētie indeksi tiek sinhronizēti uzreiz.
Validācijas noteikumi
requiredlaukiem jābūt norādītiem ierakstāmajos datos. Tiek pārbaudīta lauka esamība: skaidri norādītanullvērtība atbilst prasībai pēc obligāta lauka.- Tipizētos laukus pārbauda tikai tad, ja tie ir norādīti un nav null. Lauks ar tipu
stringnoraida vērtībuint; lauks ar tipufloatpieņem ganfloat, ganint. mixedlauki pieņem jebkādu vērtību; ar tiem var atzīmēt lauku kā obligātu vai indeksētu, nenosakot tā tipu.- Laukiem, kas nav deklarēti shēmā, ierobežojumu nav.
Ja validācija neizdodas, tiek izraisīta kļūda StorageException, pirms tiek ierakstīts kaut kas.
Lauku tipi un karodziņi
Atbalstītie tipi: string, int, float, bool, mixed.
Karodziņi katram laukam: index() (vienādības indekss), unique() (unikalitāte tiek nodrošināta ierakstīšanas brīdī), range() (sakārtots indekss gt/lt/between/prefix un sakārtotiem diapazona vaicājumiem) un required().
Shēmas izmaiņas
Indeksi tiek sinhronizēti, izveidojot krātuvi. Ja shēmas izmaiņas maina deklarēto indeksu kopu, mainās indeksu manifests un ietekmētie indeksi tiek izveidoti no jauna, izmantojot esošos ierakstus; validācijas noteikumu izmaiņas attiecas tikai uz turpmākajiem ierakstiem un nekad nepārraksta saglabātos ierakstus.
To pašu objektu Schema var atkārtoti izmantot tipizētu kolonnu kartēšanai SQL spogulī, arī kolekcijām, kuru krātuvē šī shēma netiek izmantota.