Vai al contenuto

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.

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

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 required devono essere presenti nei dati scritti. Viene verificata la presenza: un valore null esplicito soddisfa il requisito.
  • I campi tipizzati vengono controllati solo quando sono presenti e non null. Un campo string rifiuta un valore int; un campo float accetta sia float che int.
  • I campi mixed accettano 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.