Generar
Vela proporciona un generador para crear modelos de base de datos, formularios, recursos, esquemas y scaffolds CRUD completos. Todos comparten una sintaxis común. Dentro de esa sintaxis, las formas singular y plural tienen significado.
Sintaxis
$ vela generate <type> <name> [fields...] Tipos
form- Un formulario y un esquema Zod, sin modelo de base de datosschema- Un esquema Zod por sí soloresource- Un modelo de base de datos y su esquema, sin frontendscaffold- Una interfaz CRUD completa, modelo, esquema y migraciónmigration- Una migración que altera una colección existenteworkflow- Un workflow en segundo plano, sin modelo de base de datos
form y schema funcionan en cualquier proyecto SvelteKit, con o sin backend. El resto necesita un backend, y scaffold --remote también necesita shadcn-svelte.
Nombre
El nombre en plural del modelo, formulario, recurso, esquema o scaffold, por ejemplo pets o todos. Los nombres de modelo siempre son plurales y se convertirán al plural si se proporciona la forma singular. Los nombres pueden anidarse en directorios usando una barra (/) como separador. Por ejemplo, users/pets creará un recurso en /users/pets.
Campos
Los campos se definen como pares name:type, por ejemplo name:string o age:number. Si el modelo ya existe en la base de datos, la opción fields puede omitirse y el generador usará los campos existentes.
Tipos de campo
Vela admite los siguientes tipos de campo:
text
number
bool
date
email
password
url
editor
autodate
select
file/files
json
geoPoint
relation Alias
Se aceptan nombres familiares de otros ecosistemas y se normalizan a los tipos anteriores:
string → text
boolean → bool
integer, int, float, decimal, double → number
datetime, timestamp → date
geopoint → geoPoint
references → relation autodate
El tipo de campo autodate es un tipo especial que asigna automáticamente al campo la fecha y hora actuales al crear o actualizar. Los nombres de campo para autodate pueden ser: created/created_at o updated/updated_at.
select
El campo select tiene una sintaxis especial para definir las opciones. Las opciones se definen como pares value:label. La forma singular o plural del nombre del campo determina si el select es de selección simple o múltiple.
$ vela generate scaffold pets type:select(dog:Dog,cat:Cat,bird:Bird) $ vela generate scaffold products colors:select(red:Red,green:Green,blue:Blue) file
El campo file se usa para subir archivos al servidor. La forma singular o plural del nombre del campo determina si el campo acepta un solo archivo o un array de archivos.
$ vela generate scaffold owners avatar:file $ vela generate scaffold pets photos:files Campos obligatorios
Los campos se marcan como obligatorios añadiendo ! al nombre del campo. Esto marca el campo como obligatorio en la base de datos y en el esquema Zod para la validación del formulario.
$ vela generate scaffold pets name:string! age:number! Relaciones
Además de los tipos de campo anteriores, Vela admite pasar el nombre de cualquier modelo existente para crear una relación. Singular frente a plural tiene significado aquí, ya que determina si la relación es uno-a-muchos o muchos-a-muchos.
$ vela generate scaffold pets name:string owner:user $ vela generate scaffold teams name:string members:users De forma similar a Ruby on Rails, se puede usar el atajo references para crear relaciones a partir del nombre del campo.
$ vela generate scaffold posts title:string author:user tags:references Cambiar un modelo existente
Una vez que una colección existe, los campos se añaden, eliminan y renombran con vela generate migration:
$ vela generate migration pets add birthday:date Propiedad y permisos
Si la autenticación está habilitada con el comando vela enable auth, es posible asociar modelos con el usuario autenticado. Esto puede hacerse directamente en el modelo con el tipo de campo especial current_user, que asignará automáticamente al campo el usuario autenticado en la creación (y excluirá el campo del formulario del frontend).
$ vela generate scaffold posts title:string author:current_user Si el modelo está anidado dentro de otro modelo, vela recorre la jerarquía de modelos para encontrar el modelo padre más cercano con una relación con el usuario autenticado.
$ vela generate resource teams name:string
$ vela generate resource users email:string team:references
$ vela generate scaffold projects title:text team:references En este ejemplo, el modelo users está asociado con el modelo teams. El acceso al modelo projects está restringido a los usuarios que son miembros del equipo del proyecto.
Uso
En el proyecto de SvelteKit generado hay dos formas de recuperar datos de la base de datos. La primera es la API de administración locals.admin, equivalente a consultar la base de datos directamente. La segunda es la API con ámbito de usuario locals.pb, que da acceso a la base de datos limitado al usuario autenticado.
API de administración
export const load = async ({ locals }) => {
const posts = await locals.admin.collection('posts').getFullList();
return { posts };
} API con ámbito de usuario
export const load = async ({ locals }) => {
const posts = await locals.pb.collection('posts').getFullList();
return { posts };
} Limitaciones
La propiedad mediante referencia inversa no está soportada.