Hoppa till innehåll

Schema

Scheman är valfria. Ett schema har två oberoende uppgifter: det validerar varje skrivning och anger vilka fält som får index. Samlingar utan schema accepterar godtyckliga arraydata.

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

Samlingens namn i schemat måste matcha lagrets samlingsnamn; annars misslyckas konstruktionen. När du skickar schemat till konstruktorn synkroniseras även de deklarerade indexen direkt.

Valideringsregler

  • required-fält måste finnas i den skrivna datan. Det är förekomsten som kontrolleras: ett uttryckligt null uppfyller ett obligatoriskt fält.
  • Typade fält kontrolleras bara när de finns och inte är null. Ett string-fält avvisar ett värde av typen int; ett float-fält accepterar både float och int.
  • mixed-fält accepterar allt och är användbara för att markera ett fält som obligatoriskt eller indexerat utan att begränsa dess typ.
  • Fält som inte deklareras i schemat är obegränsade.

Misslyckad validering utlöser ett StorageException innan något skrivs.

Fälttyper och flaggor

Typer som stöds: string, int, float, bool, mixed.

Flaggor per fält: index() (likhetsindex), unique() (unikhet upprätthålls vid skrivning), range() (ordnat index för gt/lt/between/prefix och ordnade intervallfrågor) och required().

Schemaändringar

Index synkroniseras när lagret konstrueras. Om en schemaändring ändrar den deklarerade indexuppsättningen ändras indexmanifestet och berörda index byggs om från befintliga poster; ändringar av valideringsregler gäller bara framtida skrivningar och skriver aldrig om lagrade poster.

Samma Schema-objekt kan återanvändas för att mappa typade kolumner i en SQL-spegel, även för samlingar vars lager inte använder schemat självt.