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.
$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 uttryckligtnulluppfyller 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 typenint; ettfloat-fält accepterar bådefloatochint. 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.