Esta documentação foi traduzida automaticamente por IA.
O Database é a ferramenta de interação com banco de dados fornecida pelo NocoBase, que oferece funcionalidades muito convenientes para aplicações no-code e low-code. Atualmente, os bancos de dados suportados são:
No construtor de Database, você pode configurar a conexão do banco de dados passando o parâmetro options.
Para parâmetros de configuração detalhados, consulte Construtor.
O Database define a estrutura do banco de dados através de coleção. Um objeto coleção representa uma tabela no banco de dados.
Após definir a estrutura do banco de dados, você pode usar o método sync() para sincronizá-la.
Para um uso mais detalhado de coleção, consulte Coleção.
O Database opera nos dados através de Repository.
Para um uso mais detalhado das operações CRUD de dados, consulte Repository.
Assinatura
constructor(options: DatabaseOptions)Cria uma instância de banco de dados.
Parâmetros
| Parâmetro | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
options.host | string | 'localhost' | Host do banco de dados |
options.port | number | - | Porta do serviço de banco de dados, com uma porta padrão correspondente ao banco de dados utilizado. |
options.username | string | - | Nome de usuário do banco de dados |
options.password | string | - | Senha do banco de dados |
options.database | string | - | Nome do banco de dados |
options.dialect | string | 'mysql' | Tipo de banco de dados |
options.storage? | string | ':memory:' | Modo de armazenamento para SQLite |
options.logging? | boolean | false | Se deve habilitar o registro de logs |
options.define? | Object | {} | Parâmetros de definição de tabela padrão |
options.tablePrefix? | string | '' | Extensão NocoBase, prefixo do nome da tabela |
options.migrator? | UmzugOptions | {} | Extensão NocoBase, parâmetros relacionados ao gerenciador de migrações, consulte a implementação Umzug. |
addMigration()Adiciona um único arquivo de migração.
Assinatura
addMigration(options: MigrationItem)Parâmetros
| Parâmetro | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
options.name | string | - | Nome do arquivo de migração |
options.context? | string | - | Contexto do arquivo de migração |
options.migration? | typeof Migration | - | Classe personalizada para a migração |
options.up | Function | - | Método up do arquivo de migração |
options.down | Function | - | Método down do arquivo de migração |
Exemplo
addMigrations()Adiciona arquivos de migração de um diretório especificado.
Assinatura
addMigrations(options: AddMigrationsOptions): voidParâmetros
| Parâmetro | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
options.directory | string | '' | Diretório onde os arquivos de migração estão localizados |
options.extensions | string[] | ['js', 'ts'] | Extensões de arquivo |
options.namespace? | string | '' | Namespace |
options.context? | Object | { db } | Contexto do arquivo de migração |
Exemplo
inDialect()Verifica se o tipo de banco de dados atual é um dos tipos especificados.
Assinatura
inDialect(dialect: string[]): booleanParâmetros
| Parâmetro | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
dialect | string[] | - | Tipo de banco de dados, valores possíveis são mysql/postgres/mariadb |
getTablePrefix()Obtém o prefixo do nome da tabela da configuração.
Assinatura
getTablePrefix(): stringcollection()Define uma coleção. Esta chamada é semelhante ao método define do Sequelize, criando a estrutura da tabela apenas em memória. Para persistir no banco de dados, você precisa chamar o método sync.
Assinatura
collection(options: CollectionOptions): CollectionParâmetros
Todos os parâmetros de configuração de options são consistentes com o construtor da classe coleção, consulte Coleção.
Eventos
'beforeDefineCollection': Acionado antes de definir uma coleção.'afterDefineCollection': Acionado após definir uma coleção.Exemplo
getCollection()Obtém uma coleção definida.
Assinatura
getCollection(name: string): CollectionParâmetros
| Parâmetro | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
name | string | - | Nome da coleção |
Exemplo
hasCollection()Verifica se uma coleção especificada foi definida.
Assinatura
hasCollection(name: string): booleanParâmetros
| Parâmetro | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
name | string | - | Nome da coleção |
Exemplo
removeCollection()Remove uma coleção definida. É removida apenas da memória; para persistir a alteração, você precisa chamar o método sync.
Assinatura
removeCollection(name: string): voidParâmetros
| Parâmetro | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
name | string | - | Nome da coleção |
Eventos
'beforeRemoveCollection': Acionado antes de remover uma coleção.'afterRemoveCollection': Acionado após remover uma coleção.Exemplo
import()Importa todos os arquivos em um diretório como configurações de coleção para a memória.
Assinatura
async import(options: { directory: string; extensions?: ImportFileExtension[] }): Promise<Map<string, Collection>>Parâmetros
| Parâmetro | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
options.directory | string | - | Caminho do diretório a ser importado |
options.extensions | string[] | ['ts', 'js'] | Escaneia por sufixos específicos |
Exemplo
A coleção definida no arquivo ./collections/books.ts é a seguinte:
Importe a configuração relevante quando o plugin carregar:
registerFieldTypes()Registra tipos de campo personalizados.
Assinatura
registerFieldTypes(fieldTypes: MapOf<typeof Field>): voidParâmetros
fieldTypes é um par chave-valor onde a chave é o nome do tipo de campo e o valor é a classe do tipo de campo.
Exemplo
registerModels()Registra classes de modelo de dados personalizadas.
Assinatura
registerModels(models: MapOf<ModelStatic<any>>): voidParâmetros
models é um par chave-valor onde a chave é o nome do modelo de dados e o valor é a classe do modelo de dados.
Exemplo
registerRepositories()Registra classes de Repository personalizadas.
Assinatura
registerRepositories(repositories: MapOf<RepositoryType>): voidParâmetros
repositories é um par chave-valor onde a chave é o nome do Repository e o valor é a classe do Repository.
Exemplo
registerOperators()Registra operadores de consulta de dados personalizados.
Assinatura
registerOperators(operators: MapOf<OperatorFunc>)Parâmetros
operators é um par chave-valor onde a chave é o nome do operador e o valor é a função que gera a instrução de comparação.
Exemplo
getModel()Obtém uma classe de modelo de dados definida. Se nenhuma classe de modelo personalizada foi registrada anteriormente, ele retornará a classe de modelo padrão do Sequelize. O nome padrão é o mesmo que o nome da coleção.
Assinatura
getModel(name: string): ModelParâmetros
| Parâmetro | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
name | string | - | Nome do modelo registrado |
Exemplo
Nota: A classe de modelo obtida de uma coleção não é estritamente igual à classe de modelo registrada, mas herda dela. Como as propriedades da classe de modelo do Sequelize são modificadas durante a inicialização, o NocoBase lida automaticamente com essa relação de herança. Exceto pela desigualdade da classe, todas as outras definições podem ser usadas normalmente.
getRepository()Obtém uma classe de Repository personalizada. Se nenhuma classe de Repository personalizada foi registrada anteriormente, ele retornará a classe de Repository padrão do NocoBase. O nome padrão é o mesmo que o nome da coleção.
As classes de Repository são usadas principalmente para operações CRUD baseadas em modelos de dados, consulte Repository.
Assinatura
getRepository(name: string): RepositorygetRepository(name: string, relationId?: string | number): RepositoryParâmetros
| Parâmetro | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
name | string | - | Nome do Repository registrado |
relationId | string | number | - | Valor da chave estrangeira para dados relacionais |
Quando o nome é um nome de associação como 'tables.relations', ele retornará a classe de Repository associada. Se o segundo parâmetro for fornecido, o Repository será baseado no valor da chave estrangeira dos dados relacionais ao ser usado (consultar, atualizar, etc.).
Exemplo
Suponha que existam duas coleções, posts e authors, e a coleção de posts tem uma chave estrangeira apontando para a coleção de authors:
on()Escuta por eventos do banco de dados.
Assinatura
on(event: string, listener: (...args: any[]) => void | Promise<void>): voidParâmetros
| Parâmetro | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| event | string | - | Nome do evento |
| listener | Function | - | Listener de evento |
Os nomes dos eventos suportam os eventos de Model do Sequelize por padrão. Para eventos globais, escute usando o formato <sequelize_model_global_event>, e para eventos de Model único, use o formato <model_name>.<sequelize_model_event>.
Para descrições de parâmetros e exemplos detalhados de todos os tipos de eventos integrados, consulte a seção Eventos Integrados.
off()Remove uma função de listener de evento.
Assinatura
off(name: string, listener: Function)Parâmetros
| Parâmetro | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| name | string | - | Nome do evento |
| listener | Function | - | Listener de evento |
Exemplo
auth()Autenticação da conexão do banco de dados. Pode ser usada para garantir que a aplicação estabeleceu uma conexão com os dados.
Assinatura
auth(options: QueryOptions & { retry?: number } = {}): Promise<boolean>Parâmetros
| Parâmetro | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
options? | Object | - | Opções de autenticação |
options.retry? | number | 10 | Número de tentativas em caso de falha na autenticação |
options.transaction? | Transaction | - | Objeto de transação |
options.logging? | boolean | Function | false | Se deve imprimir logs |
Exemplo
reconnect()Reconecta ao banco de dados.
Exemplo
closed()Verifica se a conexão do banco de dados está fechada.
Assinatura
closed(): booleanclose()Fecha a conexão do banco de dados. Equivalente a sequelize.close().
sync()Sincroniza a estrutura da coleção do banco de dados. Equivalente a sequelize.sync(), para parâmetros consulte a documentação do Sequelize.
clean()Limpa o banco de dados, excluindo todas as coleções.
Assinatura
clean(options: CleanOptions): Promise<void>Parâmetros
| Parâmetro | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
options.drop | boolean | false | Se deve remover todas as coleções |
options.skip | string[] | - | Configuração dos nomes das coleções a serem ignoradas |
options.transaction | Transaction | - | Objeto de transação |
Exemplo
Remove todas as coleções, exceto a coleção users.
defineCollection()Cria o conteúdo de configuração para uma coleção.
Assinatura
defineCollection(name: string, config: CollectionOptions): CollectionOptionsParâmetros
| Parâmetro | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
collectionOptions | CollectionOptions | - | O mesmo que todos os parâmetros de db.collection() |
Exemplo
Para um arquivo de configuração de coleção a ser importado por db.import():
extendCollection()Estende o conteúdo da configuração de estrutura de coleção já em memória, usado principalmente para o conteúdo de arquivos importados pelo método import(). Este método é um método de nível superior exportado pelo pacote @nocobase/database e não é chamado através de uma instância db. O alias extend também pode ser usado.
Assinatura
extendCollection(collectionOptions: CollectionOptions, mergeOptions?: MergeOptions): ExtendedCollectionOptionsParâmetros
| Parâmetro | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
collectionOptions | CollectionOptions | - | O mesmo que todos os parâmetros de db.collection() |
mergeOptions? | MergeOptions | - | Parâmetros para o pacote npm deepmerge |
Exemplo
Definição original da coleção de livros (books.ts):
Definição estendida da coleção de livros (books.extend.ts):
Se os dois arquivos acima forem importados ao chamar import(), após serem estendidos novamente com extend(), a coleção de livros terá os campos title e price.
Este método é muito útil para estender estruturas de coleção já definidas por plugins existentes.
O banco de dados aciona os eventos correspondentes a seguir em diferentes estágios de seu ciclo de vida. Ao se inscrever neles com o método on(), você pode realizar processamentos específicos para atender a certas necessidades de negócio.
'beforeSync' / 'afterSync'Acionado antes e depois que uma nova configuração de estrutura de coleção (campos, índices, etc.) é sincronizada com o banco de dados. Geralmente é acionado quando collection.sync() (chamada interna) é executado e é usado para lidar com a lógica de extensões de campo especiais.
Assinatura
Tipo
Exemplo
'beforeValidate' / 'afterValidate'Antes de criar ou atualizar dados, há um processo de validação baseado nas regras definidas na coleção. Eventos correspondentes são acionados antes e depois da validação. Isso é acionado quando repository.create() ou repository.update() é chamado.
Assinatura
Tipo
Exemplo
'beforeCreate' / 'afterCreate'Eventos correspondentes são acionados antes e depois de criar um registro. Isso é acionado quando repository.create() é chamado.
Assinatura
Tipo
Exemplo
'beforeUpdate' / 'afterUpdate'Eventos correspondentes são acionados antes e depois de atualizar um registro. Isso é acionado quando repository.update() é chamado.
Assinatura
Tipo
Exemplo
'beforeSave' / 'afterSave'Eventos correspondentes são acionados antes e depois de criar ou atualizar um registro. Isso é acionado quando repository.create() ou repository.update() é chamado.
Assinatura
Tipo
Exemplo
'beforeDestroy' / 'afterDestroy'Eventos correspondentes são acionados antes e depois de excluir um registro. Isso é acionado quando repository.destroy() é chamado.
Assinatura
Tipo
Exemplo
'afterCreateWithAssociations'Este evento é acionado após criar um registro com dados de associação hierárquica. É acionado quando repository.create() é chamado.
Assinatura
Tipo
Exemplo
'afterUpdateWithAssociations'Este evento é acionado após atualizar um registro com dados de associação hierárquica. É acionado quando repository.update() é chamado.
Assinatura
Tipo
Exemplo
'afterSaveWithAssociations'Este evento é acionado após criar ou atualizar um registro com dados de associação hierárquica. É acionado quando repository.create() ou repository.update() é chamado.
Assinatura
Tipo
Exemplo
'beforeDefineCollection'Acionado antes que uma coleção seja definida, por exemplo, quando db.collection() é chamado.
Nota: Este é um evento síncrono.
Assinatura
Tipo
Exemplo
'afterDefineCollection'Acionado depois que uma coleção é definida, por exemplo, quando db.collection() é chamado.
Nota: Este é um evento síncrono.
Assinatura
Tipo
Exemplo
'beforeRemoveCollection' / 'afterRemoveCollection'Acionado antes e depois que uma coleção é removida da memória, por exemplo, quando db.removeCollection() é chamado.
Nota: Este é um evento síncrono.
Assinatura
Tipo
Exemplo