Saltar al contenido

Esquema

Los esquemas son opcionales. Un esquema cumple dos funciones independientes: valida cada escritura y declara qué campos tienen índices. Las colecciones sin esquema aceptan datos en cualquier arreglo.

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

El nombre de colección del esquema debe coincidir con el del almacén; de lo contrario, la construcción falla. Si pasa el esquema al constructor, también se sincronizan de inmediato los índices declarados.

Reglas de validación

  • Los campos required deben estar presentes en los datos escritos. Solo se comprueba que estén presentes: null explícito satisface el requisito.
  • Los campos tipados solo se comprueban si están presentes y no son nulos. Un campo string rechaza un valor int; un campo float acepta tanto float como int.
  • Los campos mixed aceptan cualquier valor y sirven para marcar un campo como obligatorio o indexado sin limitar su tipo.
  • Los campos no declarados en el esquema no tienen restricciones.

Si la validación falla, se produce un error StorageException antes de escribir nada.

Tipos y propiedades de los campos

Tipos admitidos: string, int, float, bool y mixed.

Propiedades por campo: index() (índice de igualdad), unique() (unicidad aplicada al escribir), range() (índice ordenado para gt/lt/between/prefix y consultas de rango ordenadas) y required().

Cambios en el esquema

Los índices se sincronizan al construir el almacén. Si un cambio en el esquema modifica el conjunto de índices declarados, cambia el manifiesto de índices y se reconstruyen los índices afectados a partir de los registros existentes; los cambios en las reglas de validación solo se aplican a las escrituras futuras y nunca reescriben los registros almacenados.

El mismo objeto Schema puede reutilizarse para asignar columnas tipadas en una réplica de SQL, incluso en colecciones cuyo almacén no use el esquema.