Esta documentación ha sido traducida automáticamente por IA.
Base de Datos
Visión general
Base de Datos es una herramienta de interacción con bases de datos que NocoBase le proporciona, ofreciendo funcionalidades muy convenientes para aplicaciones no-code y low-code. Actualmente, las bases de datos compatibles son:
- SQLite 3.8.8+
- MySQL 8.0.17+
- PostgreSQL 10.0+
Conectar a la base de datos
En el constructor de Database, puede configurar la conexión a la base de datos pasando el parámetro options.
Para conocer los parámetros de configuración detallados, consulte Constructor.
Definición del modelo de datos
Database define la estructura de la base de datos a través de la colección. Un objeto de colección representa una tabla en la base de datos.
Una vez definida la estructura de la base de datos, puede usar el método sync() para sincronizarla.
Para un uso más detallado de la colección, consulte Colección.
Lectura y escritura de datos
Database opera con los datos a través de Repository.
Para un uso más detallado de las operaciones CRUD de datos, consulte Repository.
Constructor
Firma
constructor(options: DatabaseOptions)
Crea una instancia de la base de datos.
Parámetros
Métodos relacionados con migraciones
addMigration()
Agrega un único archivo de migración.
Firma
addMigration(options: MigrationItem)
Parámetros
Ejemplo
addMigrations()
Agrega archivos de migración desde un directorio especificado.
Firma
addMigrations(options: AddMigrationsOptions): void
Parámetros
Ejemplo
Métodos de utilidad
inDialect()
Verifica si el tipo de base de datos actual es uno de los tipos especificados.
Firma
inDialect(dialect: string[]): boolean
Parámetros
getTablePrefix()
Obtiene el prefijo del nombre de la tabla de la configuración.
Firma
getTablePrefix(): string
Configuración de colección
collection()
Define una colección. Esta llamada es similar al método define de Sequelize, creando la estructura de la tabla solo en memoria. Para persistirla en la base de datos, necesita llamar al método sync.
Firma
collection(options: CollectionOptions): Collection
Parámetros
Todos los parámetros de configuración de options son consistentes con el constructor de la clase Collection, consulte Colección.
Eventos
'beforeDefineCollection': Se activa antes de definir una colección.'afterDefineCollection': Se activa después de definir una colección.
Ejemplo
getCollection()
Obtiene una colección definida.
Firma
getCollection(name: string): Collection
Parámetros
Ejemplo
hasCollection()
Verifica si se ha definido una colección específica.
Firma
hasCollection(name: string): boolean
Parámetros
Ejemplo
removeCollection()
Elimina una colección definida. Solo se elimina de la memoria; para persistir el cambio, necesita llamar al método sync.
Firma
removeCollection(name: string): void
Parámetros
Eventos
'beforeRemoveCollection': Se activa antes de eliminar una colección.'afterRemoveCollection': Se activa después de eliminar una colección.
Ejemplo
import()
Importa todos los archivos de un directorio como configuraciones de colección en memoria.
Firma
async import(options: { directory: string; extensions?: ImportFileExtension[] }): Promise<Map<string, Collection>>
Parámetros
Ejemplo
La colección definida en el archivo ./collections/books.ts es la siguiente:
Importe la configuración relevante cuando se cargue el plugin:
Registro y recuperación de extensiones
registerFieldTypes()
Registra tipos de campo personalizados.
Firma
registerFieldTypes(fieldTypes: MapOf<typeof Field>): void
Parámetros
fieldTypes es un par clave-valor donde la clave es el nombre del tipo de campo y el valor es la clase del tipo de campo.
Ejemplo
registerModels()
Registra clases de modelo de datos personalizadas.
Firma
registerModels(models: MapOf<ModelStatic<any>>): void
Parámetros
models es un par clave-valor donde la clave es el nombre del modelo y el valor es la clase del modelo.
Ejemplo
registerRepositories()
Registra clases de repositorio de datos personalizadas.
Firma
registerRepositories(repositories: MapOf<RepositoryType>): void
Parámetros
repositories es un par clave-valor donde la clave es el nombre del repositorio y el valor es la clase del repositorio.
Ejemplo
registerOperators()
Registra operadores de consulta de datos personalizados.
Firma
registerOperators(operators: MapOf<OperatorFunc>)
Parámetros
operators es un par clave-valor donde la clave es el nombre del operador y el valor es la función que genera la declaración de comparación.
Ejemplo
getModel()
Obtiene una clase de modelo de datos definida. Si no se registró previamente ninguna clase de modelo personalizada, se devolverá la clase de modelo predeterminada de Sequelize. El nombre predeterminado es el mismo que el nombre de la colección.
Firma
getModel(name: string): Model
Parámetros
Ejemplo
Nota: La clase de modelo obtenida de una colección no es estrictamente igual a la clase de modelo registrada, sino que hereda de ella. Dado que las propiedades de la clase de modelo de Sequelize se modifican durante la inicialización, NocoBase maneja automáticamente esta relación de herencia. Excepto por la desigualdad de clases, todas las demás definiciones se pueden usar normalmente.
getRepository()
Obtiene una clase de repositorio de datos personalizada. Si no se registró previamente ninguna clase de repositorio de datos personalizada, se devolverá la clase de repositorio de datos predeterminada de NocoBase. El nombre predeterminado es el mismo que el nombre de la colección.
Las clases de repositorio se utilizan principalmente para operaciones CRUD basadas en modelos de datos, consulte Repository.
Firma
getRepository(name: string): RepositorygetRepository(name: string, relationId?: string | number): Repository
Parámetros
Cuando el nombre es un nombre de asociación como 'tables.relations', se devolverá la clase de repositorio asociada. Si se proporciona el segundo parámetro, el repositorio se basará en el valor de la clave foránea de los datos relacionales cuando se utilice (consultas, actualizaciones, etc.).
Ejemplo
Supongamos que existen dos colecciones, posts y authors, y la colección de posts tiene una clave foránea que apunta a la colección de authors:
Eventos de la base de datos
on()
Escucha eventos de la base de datos.
Firma
on(event: string, listener: (...args: any[]) => void | Promise<void>): void
Parámetros
Los nombres de los eventos admiten los eventos de Modelo de Sequelize de forma predeterminada. Para eventos globales, escuche utilizando el formato <sequelize_model_global_event>, y para eventos de Modelo individuales, utilice el formato <model_name>.<sequelize_model_event>.
Para descripciones de parámetros y ejemplos detallados de todos los tipos de eventos incorporados, consulte la sección Eventos incorporados.
off()
Elimina una función de escucha de eventos.
Firma
off(name: string, listener: Function)
Parámetros
Ejemplo
Operaciones de la base de datos
auth()
Autenticación de la conexión a la base de datos. Se puede utilizar para asegurar que la aplicación ha establecido una conexión con los datos.
Firma
auth(options: QueryOptions & { retry?: number } = {}): Promise<boolean>
Parámetros
Ejemplo
reconnect()
Vuelve a conectar a la base de datos.
Ejemplo
closed()
Verifica si la conexión a la base de datos está cerrada.
Firma
closed(): boolean
close()
Cierra la conexión a la base de datos. Equivalente a sequelize.close().
sync()
Sincroniza la estructura de la colección de la base de datos. Equivalente a sequelize.sync(); para los parámetros, consulte la documentación de Sequelize.
clean()
Limpia la base de datos, eliminando todas las colecciones.
Firma
clean(options: CleanOptions): Promise<void>
Parámetros
Ejemplo
Elimina todas las colecciones excepto la colección users.
Exportaciones a nivel de paquete
defineCollection()
Crea el contenido de configuración para una colección.
Firma
defineCollection(name: string, config: CollectionOptions): CollectionOptions
Parámetros
Ejemplo
Para un archivo de configuración de colección que será importado por db.import():
extendCollection()
Extiende el contenido de configuración de una estructura de colección ya en memoria, principalmente para el contenido de archivos importados por el método import(). Este método es un método de nivel superior exportado por el paquete @nocobase/database y no se llama a través de una instancia de db. También se puede usar el alias extend.
Firma
extendCollection(collectionOptions: CollectionOptions, mergeOptions?: MergeOptions): ExtendedCollectionOptions
Parámetros
Ejemplo
Definición original de la colección books (books.ts):
Definición extendida de la colección books (books.extend.ts):
Si los dos archivos anteriores se importan al llamar a import(), después de ser extendidos nuevamente con extend(), la colección books tendrá los campos title y price.
Este método es muy útil para extender estructuras de colección ya definidas por plugins existentes.
Eventos incorporados
La base de datos activa los siguientes eventos correspondientes en las distintas etapas de su ciclo de vida. Al suscribirse a ellos con el método on(), puede realizar un procesamiento específico para satisfacer ciertas necesidades comerciales.
'beforeSync' / 'afterSync'
Se activa antes y después de que una nueva configuración de estructura de colección (campos, índices, etc.) se sincronice con la base de datos. Generalmente se activa cuando se ejecuta collection.sync() (llamada interna) y se utiliza para manejar la lógica de extensiones de campos especiales.
Firma
Tipo
Ejemplo
'beforeValidate' / 'afterValidate'
Antes de crear o actualizar datos, existe un proceso de validación basado en las reglas definidas en la colección. Los eventos correspondientes se activan antes y después de la validación. Esto se activa cuando se llama a repository.create() o repository.update().
Firma
Tipo
Ejemplo
'beforeCreate' / 'afterCreate'
Los eventos correspondientes se activan antes y después de crear un registro. Esto se activa cuando se llama a repository.create().
Firma
Tipo
Ejemplo
'beforeUpdate' / 'afterUpdate'
Los eventos correspondientes se activan antes y después de actualizar un registro. Esto se activa cuando se llama a repository.update().
Firma
Tipo
Ejemplo
'beforeSave' / 'afterSave'
Los eventos correspondientes se activan antes y después de crear o actualizar un registro. Esto se activa cuando se llama a repository.create() o repository.update().
Firma
Tipo
Ejemplo
'beforeDestroy' / 'afterDestroy'
Los eventos correspondientes se activan antes y después de eliminar un registro. Esto se activa cuando se llama a repository.destroy().
Firma
Tipo
Ejemplo
'afterCreateWithAssociations'
Este evento se activa después de crear un registro con datos de asociación jerárquica. Se activa cuando se llama a repository.create().
Firma
Tipo
Ejemplo
'afterUpdateWithAssociations'
Este evento se activa después de actualizar un registro con datos de asociación jerárquica. Se activa cuando se llama a repository.update().
Firma
Tipo
Ejemplo
'afterSaveWithAssociations'
Este evento se activa después de crear o actualizar un registro con datos de asociación jerárquica. Se activa cuando se llama a repository.create() o repository.update().
Firma
Tipo
Ejemplo
'beforeDefineCollection'
Se activa antes de definir una colección, por ejemplo, al llamar a db.collection().
Nota: Este es un evento síncrono.
Firma
Tipo
Ejemplo
'afterDefineCollection'
Se activa después de definir una colección, por ejemplo, al llamar a db.collection().
Nota: Este es un evento síncrono.
Firma
Tipo
Ejemplo
'beforeRemoveCollection' / 'afterRemoveCollection'
Se activa antes y después de que una colección se elimine de la memoria, por ejemplo, al llamar a db.removeCollection().
Nota: Este es un evento síncrono.
Firma
Tipo
Ejemplo

