Ugrás a tartalomhoz

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.

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

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 required mezőknek jelen kell lenniük az írt adatokban. A rendszer csak a jelenlétet ellenőrzi: a kifejezetten megadott null is 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 string mező elutasítja a int értéket; a float mező a float és a int értéket is elfogadja.
  • A mixed mező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.