Esquema
Os esquemas são opcionais. Um esquema tem duas funções independentes: valida cada operação de gravação e declara quais campos recebem índices. Coleções sem esquema aceitam dados de qualquer array.
$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);
O nome da coleção no esquema deve corresponder ao nome da coleção no armazenamento; a construção gera um erro caso contrário. Passar o esquema ao construtor também sincroniza imediatamente os índices declarados.
Regras de validação
- Os campos
requiredprecisam estar presentes nos dados gravados. A verificação considera a presença: umnullexplícito satisfaz um campo obrigatório. - Os campos tipados são verificados somente quando estão presentes e não são nulos. Um campo
stringrejeita um valorint; um campofloataceita tantofloatquantoint. - Os campos
mixedaceitam qualquer valor e são úteis para marcar um campo como obrigatório ou indexado sem restringir seu tipo. - Campos não declarados no esquema não têm restrições.
Uma validação malsucedida gera um StorageException antes de qualquer gravação.
Tipos e sinalizadores de campo
Tipos compatíveis: string, int, float, bool, mixed.
Sinalizadores por campo: index() (índice de igualdade), unique() (unicidade aplicada
no momento da gravação), range() (índice ordenado para gt/lt/between/prefix e
consultas de intervalo ordenadas) e required().
Alterações no esquema
Os índices são sincronizados quando o armazenamento é construído. Se uma alteração no esquema modifica o conjunto de índices declarados, o manifesto de índices muda e os índices afetados são reconstruídos a partir dos registros existentes; alterações nas regras de validação se aplicam somente a gravações futuras e nunca reescrevem registros armazenados.
O mesmo objeto Schema pode ser reutilizado para mapear colunas tipadas em um espelho SQL, inclusive em coleções cujo armazenamento não usa o esquema em si.