Ga naar de inhoud

Schema

Schema's zijn optioneel. Een schema heeft twee afzonderlijke functies: het valideert elke schrijfbewerking en bepaalt voor welke velden indexen worden gemaakt. Collecties zonder schema accepteren arrays met willekeurige gegevens.

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

De collectienaam in het schema moet overeenkomen met de collectienaam van de store; anders wordt een fout gegenereerd bij het maken van de instantie. Als u het schema aan de constructor doorgeeft, worden de gedeclareerde indexen ook meteen gesynchroniseerd.

Validatieregels

  • Velden required moeten aanwezig zijn in de geschreven gegevens. Er wordt gecontroleerd op aanwezigheid: een expliciete null voldoet aan de vereiste.
  • Getypeerde velden worden alleen gecontroleerd als ze aanwezig en niet null zijn. Een veld string weigert een waarde van int; een veld float accepteert zowel float als int.
  • Velden mixed accepteren alles en zijn handig om een veld als verplicht of geïndexeerd aan te duiden zonder het type te beperken.
  • Voor velden die niet in het schema zijn gedeclareerd, gelden geen beperkingen.

Een mislukte validatie genereert een StorageException voordat er iets wordt geschreven.

Veldtypen en vlaggen

Ondersteunde typen: string, int, float, bool, mixed.

Vlaggen per veld: index() (gelijkheidsindex), unique() (uniekheid wordt afgedwongen tijdens het schrijven), range() (geordende index voor gt/lt/between/prefix en geordende bereikqueries), en required().

Schemawijzigingen

Indexen worden gesynchroniseerd wanneer de store wordt aangemaakt. Als een schemawijziging de gedeclareerde indexset verandert, wordt het indexmanifest bijgewerkt en worden de betreffende indexen opnieuw opgebouwd uit de bestaande records. Wijzigingen in validatieregels gelden alleen voor toekomstige schrijfbewerkingen en wijzigen opgeslagen records nooit.

Hetzelfde Schema-object kan opnieuw worden gebruikt om getypeerde kolommen toe te wijzen in een SQL-mirror, ook voor collecties waarvan de store het schema zelf niet gebruikt.