Skeema
Skeemat ovat valinnaisia. Skeemalla on kaksi erillistä tehtävää: se tarkistaa jokaisen kirjoituksen ja määrittää, mitkä kentät indeksoidaan indekseillä. Kokoelmat, joilla ei ole skeemaa, hyväksyvät minkä tahansa taulukkomuotoisen datan.
$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);
Skeeman kokoelman nimen on vastattava tietovaraston kokoelman nimeä; muussa tapauksessa konstruktorin kutsu aiheuttaa virheen. Skeeman välittäminen konstruktorille synkronoi myös määritetyt indeksit heti.
Validointisäännöt
required-kenttien on oltava kirjoitettavassa datassa. Tarkistetaan kentän olemassaolo: eksplisiittinennulltäyttää pakollisen kentän vaatimuksen.- Tyypitetyt kentät tarkistetaan vain, jos ne ovat olemassa ja niiden arvo ei ole null. Kenttä
stringhylkää arvonint; kenttäfloathyväksyy sekä arvotfloatettäint. - Kentät
mixedhyväksyvät mitä tahansa, ja niitä voi käyttää kentän merkitsemiseen pakolliseksi tai indeksoiduksi sen tyyppiä rajoittamatta. - Skeemassa määrittelemättömiä kenttiä ei rajoiteta.
Epäonnistunut validointi aiheuttaa StorageException-virheen ennen kuin mitään kirjoitetaan.
Kenttätyypit ja liput
Tuetut tyypit: string, int, float, bool, mixed.
Kenttäkohtaiset liput: index() (yhtäsuuruusindeksi), unique() (yksikäsitteisyys tarkistetaan kirjoitettaessa), range() (järjestetty indeksi arvoille gt/lt/between/prefix sekä järjestetyille välikyselyille) ja required().
Skeeman muutokset
Indeksit synkronoidaan tietovarastoa luotaessa. Jos skeeman muutos muuttaa määritettyjen indeksien joukkoa, indeksiluettelo muuttuu ja muutetut indeksit rakennetaan uudelleen olemassa olevista tietueista. Validointisääntöjen muutokset koskevat vain tulevia kirjoituksia, eivätkä ne koskaan kirjoita tallennettuja tietueita uudelleen.
Samaa Schema-objektia voi käyttää tyypitettyjen sarakkeiden yhdistämiseen SQL-peilissä, myös kokoelmille, joiden tietovarasto ei itse käytä skeemaa.