Séma
A sémák használata nem kötelező. A séma két egymástól független feladatot lát el: érvényesít minden írást, és megadja, mely mezők kapnak indexeket. A séma nélküli gyűjtemények bármilyen tömbadatot elfogadnak.
$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);
A séma gyűjteménynevének meg kell egyeznie a tároló gyűjteménynevével; ellenkező esetben a példányosítás hibát jelez. Ha a sémát átadja a konstruktornak, az azonnal szinkronizálja a deklarált indexeket is.
Érvényesítési szabályok
- A
requiredmezőknek jelen kell lenniük az írt adatokban. A rendszer csak a jelenlétet ellenőrzi: a kifejezetten megadottnullis megfelel a kötelező mező feltételének. - A típusellenőrzés csak a jelen lévő, nem null értékű mezőkre vonatkozik. A
stringmező elutasítja aintértéket; afloatmező afloatés aintértéket is elfogadja. - A
mixedmezők bármit elfogadnak, és hasznosak, ha egy mezőt kötelezőként vagy indexeltként szeretne megjelölni anélkül, hogy megszabná a típusát. - A sémában nem deklarált mezőkre nincs korlátozás.
A sikertelen érvényesítés StorageException hibát okoz, mielőtt bármit kiírna a rendszer.
Mezőtípusok és jelölők
Támogatott típusok: string, int, float, bool, mixed.
Mezőnkénti jelölők: index() (egyenlőségi index), unique() (az egyediséget íráskor ellenőrzi), range() (rendezett index a gt/lt/between/prefix műveletekhez és a rendezett tartománylekérdezésekhez), valamint required().
Sémamódosítások
Az indexek a tároló példányosításakor szinkronizálódnak. Ha egy sémamódosítás megváltoztatja a deklarált indexek halmazát, az indexjegyzék is változik, az érintett indexek pedig újraépülnek a meglévő rekordokból; az érvényesítési szabályok módosításai csak a jövőbeli írásokra vonatkoznak, a tárolt rekordokat soha nem írják át.
Ugyanaz a Schema objektum a típusoszlopok leképezésére is felhasználható egy SQL tükörben, olyan gyűjteményeknél is, amelyek tárolója maga nem használja a sémát.