Schema
Gli schemi sono facoltativi. Uno schema svolge due funzioni indipendenti: convalida ogni scrittura e dichiara quali campi ottengono indici. Le raccolte senza schema accettano dati di qualsiasi array.
$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);
Il nome della raccolta dello schema deve corrispondere a quello della raccolta dell'archivio; altrimenti la costruzione genera un errore. Passando lo schema al costruttore, gli indici dichiarati vengono sincronizzati subito.
Regole di convalida
- I campi
requireddevono essere presenti nei dati scritti. Viene verificata la presenza: un valorenullesplicito soddisfa il requisito. - I campi tipizzati vengono controllati solo quando sono presenti e non null. Un campo
stringrifiuta un valoreint; un campofloataccetta siafloatcheint. - I campi
mixedaccettano qualsiasi valore e sono utili per contrassegnare un campo come obbligatorio o indicizzato senza vincolarne il tipo. - I campi non dichiarati nello schema non hanno restrizioni.
Una convalida non riuscita genera un StorageException prima che venga scritto alcunché.
Tipi e flag dei campi
Tipi supportati: string, int, float, bool, mixed.
Flag per campo: index() (indice di uguaglianza), unique() (unicità applicata al momento della scrittura), range() (indice ordinato per gt/lt/between/prefix e query per intervallo ordinate) e required().
Modifiche allo schema
Gli indici vengono sincronizzati alla creazione dell'archivio. Se una modifica allo schema cambia l'insieme degli indici dichiarati, il manifest degli indici cambia e quelli interessati vengono ricostruiti dai record esistenti; le modifiche alle regole di convalida si applicano solo alle scritture future e non riscrivono mai i record memorizzati.
Lo stesso oggetto Schema può essere riutilizzato per mappare colonne tipizzate in un mirror SQL, anche per raccolte il cui archivio non usa direttamente lo schema.