Schema
Schemas sind optional und erfüllen zwei voneinander unabhängige Aufgaben: Sie validieren jeden Schreibvorgang und deklarieren, welche Felder Indizes erhalten. Sammlungen ohne Schema akzeptieren beliebige Array-Daten.
$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);
Der Sammlungsname im Schema muss mit dem Sammlungsnamen des Speichers übereinstimmen; andernfalls schlägt die Konstruktion fehl. Wenn du das Schema an den Konstruktor übergibst, werden die deklarierten Indizes außerdem sofort synchronisiert.
Validierungsregeln
required-Felder müssen in den geschriebenen Daten vorhanden sein. Geprüft wird nur, ob das Feld vorhanden ist: Auch ein ausdrücklich angegebenesnullerfüllt die Anforderung.- Typisierte Felder werden nur geprüft, wenn sie vorhanden und nicht null sind. Ein Feld des Typs
stringweist einen Wert vom Typintzurück; ein Feld des Typsfloatakzeptiert sowohlfloatals auchint. mixed-Felder akzeptieren beliebige Werte. Damit lässt sich ein Feld als erforderlich oder indiziert markieren, ohne seinen Typ einzuschränken.- Für im Schema nicht deklarierte Felder gelten keine Einschränkungen.
Bei fehlgeschlagener Validierung wird eine StorageException ausgelöst, bevor etwas geschrieben wird.
Feldtypen und Kennzeichen
Unterstützte Typen: string, int, float, bool, mixed.
Kennzeichen pro Feld: index() (Gleichheitsindex), unique() (Eindeutigkeit wird beim Schreiben durchgesetzt), range() (sortierter Index für gt/lt/between/prefix und sortierte Bereichsabfragen) sowie required().
Schemaänderungen
Indizes werden synchronisiert, wenn der Speicher erstellt wird. Ändert eine Schemaänderung die Menge der deklarierten Indizes, wird das Indexmanifest aktualisiert und die betroffenen Indizes werden anhand der vorhandenen Datensätze neu erstellt. Änderungen an Validierungsregeln gelten nur für künftige Schreibvorgänge und schreiben gespeicherte Datensätze niemals um.
Dasselbe Schema-Objekt kann auch verwendet werden, um typisierte Spalten in einem SQL-Spiegel abzubilden, auch bei Sammlungen, deren Speicher das Schema selbst nicht verwendet.