Schéma
Les schémas sont facultatifs. Un schéma remplit deux fonctions indépendantes : il valide chaque écriture et déclare les champs dotés d’index. Les collections sans schéma acceptent toutes les données sous forme de tableaux.
$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);
Le nom de la collection du schéma doit correspondre à celui du magasin ; sinon, la construction échoue. Le passage du schéma au constructeur synchronise aussi immédiatement les index déclarés.
Règles de validation
- Les champs
requireddoivent être présents dans les données écrites. Seule la présence est vérifiée : la valeurnullexplicite satisfait aussi cette exigence. - Les champs typés ne sont vérifiés que s’ils sont présents et non nuls. Un champ
stringrejette une valeurint; un champfloataccepte à la foisfloatetint. - Les champs
mixedacceptent n’importe quelle valeur et permettent d’indiquer qu’un champ est obligatoire ou indexé sans imposer son type. - Les champs non déclarés dans le schéma sont libres de toute restriction.
Un échec de validation déclenche une StorageException avant toute écriture.
Types et indicateurs de champ
Types pris en charge : string, int, float, bool, mixed.
Indicateurs par champ : index() (index d’égalité), unique() (unicité imposée à l’écriture), range() (index ordonné pour gt/lt/between/prefix et les requêtes de plage ordonnées), et required().
Modifications du schéma
Les index sont synchronisés à la construction du magasin. Si une modification du schéma change l’ensemble d’index déclarés, le manifeste des index est mis à jour et les index concernés sont reconstruits à partir des enregistrements existants ; les modifications des règles de validation ne s’appliquent qu’aux écritures futures et ne réécrivent jamais les enregistrements stockés.
Le même objet Schema peut être réutilisé pour mapper des colonnes typées dans un miroir SQL, y compris pour les collections dont le magasin n’utilise pas lui-même le schéma.