Pāriet uz saturu

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.

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);

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

  • required laukiem jābūt norādītiem ierakstāmajos datos. Tiek pārbaudīta lauka esamība: skaidri norādīta null vē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 string noraida vērtību int; lauks ar tipu float pieņem gan float, gan int.
  • mixed lauki 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.