Lewati ke konten

Skema

Skema bersifat opsional. Skema menjalankan dua fungsi terpisah: memvalidasi setiap penulisan dan mendeklarasikan kolom mana yang mendapatkan indeks. Koleksi tanpa skema menerima data array apa pun.

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

Nama koleksi pada skema harus sama dengan nama koleksi penyimpanan; jika tidak, konstruksi akan memunculkan error. Meneruskan skema ke konstruktor juga langsung menyinkronkan indeks yang dideklarasikan.

Aturan validasi

  • Kolom required harus ada dalam data yang ditulis. Yang diperiksa adalah keberadaannya: null eksplisit memenuhi syarat untuk kolom wajib.
  • Kolom bertipe hanya diperiksa jika ada dan tidak bernilai null. Kolom string menolak nilai int; kolom float menerima float maupun int.
  • Kolom mixed menerima nilai apa pun dan berguna untuk menandai kolom sebagai wajib atau berindeks tanpa membatasi tipenya.
  • Kolom yang tidak dideklarasikan dalam skema tidak dibatasi.

Validasi yang gagal akan memunculkan StorageException sebelum apa pun ditulis.

Tipe dan flag kolom

Tipe yang didukung: string, int, float, bool, mixed.

Flag untuk setiap kolom: index() (indeks kesetaraan), unique() (keunikan diterapkan saat penulisan), range() (indeks terurut untuk gt/lt/between/prefix dan kueri rentang terurut), serta required().

Perubahan skema

Indeks disinkronkan saat penyimpanan dikonstruksi. Jika perubahan skema mengubah kumpulan indeks yang dideklarasikan, manifest indeks berubah dan indeks yang terdampak dibangun ulang dari catatan yang ada; perubahan aturan validasi hanya berlaku untuk penulisan berikutnya dan tidak pernah menulis ulang catatan yang tersimpan.

Objek Schema yang sama dapat digunakan kembali untuk memetakan kolom bertipe dalam mirror SQL, termasuk untuk koleksi yang penyimpanannya sendiri tidak menggunakan skema tersebut.