Questa documentazione è stata tradotta automaticamente dall'IA.
Database è lo strumento di interazione con il database fornito da NocoBase, che offre funzionalità molto convenienti per le applicazioni no-code e low-code. Attualmente, i database supportati sono:
Nel costruttore Database, è possibile configurare la connessione al database passando il parametro options.
Per i parametri di configurazione dettagliati, La preghiamo di consultare Costruttore.
Database definisce la struttura del database tramite collezione. Un oggetto collezione rappresenta una tabella nel database.
Dopo aver definito la struttura del database, può utilizzare il metodo sync() per sincronizzarla.
Per un utilizzo più dettagliato delle collezioni, La preghiamo di fare riferimento a Collection.
Database opera sui dati tramite Repository.
Per un utilizzo più dettagliato delle operazioni CRUD sui dati, La preghiamo di fare riferimento a Repository.
Firma
constructor(options: DatabaseOptions)Crea un'istanza del database.
Parametri
| Parametro | Tipo | Valore predefinito | Descrizione |
|---|---|---|---|
options.host | string | 'localhost' | Host del database |
options.port | number | - | Porta del servizio database, con una porta predefinita corrispondente al database utilizzato |
options.username | string | - | Nome utente del database |
options.password | string | - | Password del database |
options.database | string | - | Nome del database |
options.dialect | string | 'mysql' | Tipo di database |
options.storage? | string | ':memory:' | Modalità di archiviazione per SQLite |
options.logging? | boolean | false | Se abilitare la registrazione dei log |
options.define? | Object | {} | Parametri di definizione della tabella predefiniti |
options.tablePrefix? | string | '' | Estensione NocoBase, prefisso del nome della tabella |
options.migrator? | UmzugOptions | {} | Estensione NocoBase, parametri relativi al gestore delle migrazioni; La preghiamo di fare riferimento all'implementazione di Umzug |
addMigration()Aggiunge un singolo file di migrazione.
Firma
addMigration(options: MigrationItem)Parametri
| Parametro | Tipo | Valore predefinito | Descrizione |
|---|---|---|---|
options.name | string | - | Nome del file di migrazione |
options.context? | string | - | Contesto del file di migrazione |
options.migration? | typeof Migration | - | Classe personalizzata per il file di migrazione |
options.up | Function | - | Metodo up del file di migrazione |
options.down | Function | - | Metodo down del file di migrazione |
Esempio
addMigrations()Aggiunge i file di migrazione da una directory specificata.
Firma
addMigrations(options: AddMigrationsOptions): voidParametri
| Parametro | Tipo | Valore predefinito | Descrizione |
|---|---|---|---|
options.directory | string | '' | Directory in cui si trovano i file di migrazione |
options.extensions | string[] | ['js', 'ts'] | Estensioni dei file |
options.namespace? | string | '' | Namespace |
options.context? | Object | { db } | Contesto del file di migrazione |
Esempio
inDialect()Verifica se il tipo di database attuale corrisponde a uno dei tipi specificati.
Firma
inDialect(dialect: string[]): booleanParametri
| Parametro | Tipo | Valore predefinito | Descrizione |
|---|---|---|---|
dialect | string[] | - | Tipo di database, i valori possibili sono mysql/postgres/mariadb |
getTablePrefix()Recupera il prefisso del nome della tabella dalla configurazione.
Firma
getTablePrefix(): stringcollection()Definisce una collezione. Questa chiamata è simile al metodo define di Sequelize, creando la struttura della tabella solo in memoria. Per renderla persistente nel database, è necessario richiamare il metodo sync.
Firma
collection(options: CollectionOptions): CollectionParametri
Tutti i parametri di configurazione di options sono coerenti con il costruttore della classe collezione; La preghiamo di fare riferimento a Collection.
Eventi
'beforeDefineCollection': Attivato prima di definire una collezione.'afterDefineCollection': Attivato dopo aver definito una collezione.Esempio
getCollection()Recupera una collezione definita.
Firma
getCollection(name: string): CollectionParametri
| Parametro | Tipo | Valore predefinito | Descrizione |
|---|---|---|---|
name | string | - | Nome della collezione |
Esempio
hasCollection()Verifica se una collezione specificata è stata definita.
Firma
hasCollection(name: string): booleanParametri
| Parametro | Tipo | Valore predefinito | Descrizione |
|---|---|---|---|
name | string | - | Nome della collezione |
Esempio
removeCollection()Rimuove una collezione definita. Viene rimossa solo dalla memoria; per rendere persistente la modifica, è necessario richiamare il metodo sync.
Firma
removeCollection(name: string): voidParametri
| Parametro | Tipo | Valore predefinito | Descrizione |
|---|---|---|---|
name | string | - | Nome della collezione |
Eventi
'beforeRemoveCollection': Attivato prima di rimuovere una collezione.'afterRemoveCollection': Attivato dopo aver rimosso una collezione.Esempio
import()Importa tutti i file di una directory come configurazioni di collezione in memoria.
Firma
async import(options: { directory: string; extensions?: ImportFileExtension[] }): Promise<Map<string, Collection>>Parametri
| Parametro | Tipo | Valore predefinito | Descrizione |
|---|---|---|---|
options.directory | string | - | Percorso della directory da importare |
options.extensions | string[] | ['ts', 'js'] | Scansiona per suffissi specifici |
Esempio
La collezione definita nel file ./collections/books.ts è la seguente:
Importi la configurazione pertinente al caricamento del plugin:
registerFieldTypes()Registra tipi di campo personalizzati.
Firma
registerFieldTypes(fieldTypes: MapOf<typeof Field>): voidParametri
fieldTypes è una coppia chiave-valore in cui la chiave è il nome del tipo di campo e il valore è la classe del tipo di campo.
Esempio
registerModels()Registra classi di modelli dati personalizzati.
Firma
registerModels(models: MapOf<ModelStatic<any>>): voidParametri
models è una coppia chiave-valore in cui la chiave è il nome del modello e il valore è la classe del modello.
Esempio
registerRepositories()Registra classi di repository personalizzati.
Firma
registerRepositories(repositories: MapOf<RepositoryType>): voidParametri
repositories è una coppia chiave-valore in cui la chiave è il nome del repository e il valore è la classe del repository.
Esempio
registerOperators()Registra operatori di query dati personalizzati.
Firma
registerOperators(operators: MapOf<OperatorFunc>)Parametri
operators è una coppia chiave-valore in cui la chiave è il nome dell'operatore e il valore è la funzione che genera l'istruzione di confronto.
Esempio
getModel()Recupera una classe di modello dati definita. Se nessuna classe di modello personalizzata è stata precedentemente registrata, verrà restituita la classe di modello predefinita di Sequelize. Il nome predefinito è lo stesso del nome della collezione.
Firma
getModel(name: string): ModelParametri
| Parametro | Tipo | Valore predefinito | Descrizione |
|---|---|---|---|
name | string | - | Nome del modello registrato |
Esempio
Nota: La classe del modello ottenuta da una collezione non è strettamente uguale alla classe del modello registrata, ma ne eredita le proprietà. Poiché le proprietà della classe del modello di Sequelize vengono modificate durante l'inizializzazione, NocoBase gestisce automaticamente questa relazione di ereditarietà. Ad eccezione della disuguaglianza di classe, tutte le altre definizioni possono essere utilizzate normalmente.
getRepository()Recupera una classe di repository personalizzata. Se nessuna classe di repository personalizzata è stata precedentemente registrata, verrà restituita la classe di repository predefinita di NocoBase. Il nome predefinito è lo stesso del nome della collezione.
Le classi Repository sono utilizzate principalmente per le operazioni CRUD basate sui modelli dati; La preghiamo di fare riferimento a Repository.
Firma
getRepository(name: string): RepositorygetRepository(name: string, relationId?: string | number): RepositoryParametri
| Parametro | Tipo | Valore predefinito | Descrizione |
|---|---|---|---|
name | string | - | Nome del repository registrato |
relationId | string | number | - | Valore della chiave esterna per i dati relazionali |
Quando il nome è un nome di associazione come 'tables.relations', verrà restituita la classe di repository associata. Se viene fornito il secondo parametro, il repository si baserà sul valore della chiave esterna dei dati relazionali quando utilizzato (per query, aggiornamenti, ecc.).
Esempio
Supponiamo che ci siano due collezioni, articoli e autori, e che la collezione degli articoli abbia una chiave esterna che punta alla collezione degli autori:
on()Si mette in ascolto degli eventi del database.
Firma
on(event: string, listener: (...args: any[]) => void | Promise<void>): voidParametri
| Parametro | Tipo | Valore predefinito | Descrizione |
|---|---|---|---|
| event | string | - | Nome dell'evento |
| listener | Function | - | Listener dell'evento |
I nomi degli eventi supportano per impostazione predefinita gli eventi Model di Sequelize. Per gli eventi globali, si metta in ascolto utilizzando il formato <sequelize_model_global_event>, mentre per gli eventi di un singolo Model, utilizzi il formato <model_name>.<sequelize_model_event>.
Per le descrizioni dei parametri e gli esempi dettagliati di tutti i tipi di eventi integrati, La preghiamo di fare riferimento alla sezione Eventi Integrati.
off()Rimuove una funzione listener di evento.
Firma
off(name: string, listener: Function)Parametri
| Parametro | Tipo | Valore predefinito | Descrizione |
|---|---|---|---|
| name | string | - | Nome dell'evento |
| listener | Function | - | Listener dell'evento |
Esempio
auth()Autenticazione della connessione al database. Può essere utilizzata per assicurarsi che l'applicazione abbia stabilito una connessione con i dati.
Firma
auth(options: QueryOptions & { retry?: number } = {}): Promise<boolean>Parametri
| Parametro | Tipo | Valore predefinito | Descrizione |
|---|---|---|---|
options? | Object | - | Opzioni di autenticazione |
options.retry? | number | 10 | Numero di tentativi in caso di fallimento dell'autenticazione |
options.transaction? | Transaction | - | Oggetto transazione |
options.logging? | boolean | Function | false | Se abilitare la stampa dei log |
Esempio
reconnect()Riconnette al database.
Esempio
closed()Verifica se la connessione al database è chiusa.
Firma
closed(): booleanclose()Chiude la connessione al database. Equivalente a sequelize.close().
sync()Sincronizza la struttura della collezione del database. Equivalente a sequelize.sync(); per i parametri, La preghiamo di fare riferimento alla documentazione di Sequelize.
clean()Pulisce il database, eliminando tutte le collezioni.
Firma
clean(options: CleanOptions): Promise<void>Parametri
| Parametro | Tipo | Valore predefinito | Descrizione |
|---|---|---|---|
options.drop | boolean | false | Se eliminare tutte le collezioni |
options.skip | string[] | - | Configurazione dei nomi delle collezioni da saltare |
options.transaction | Transaction | - | Oggetto transazione |
Esempio
Rimuove tutte le collezioni ad eccezione della collezione users.
defineCollection()Crea il contenuto di configurazione per una collezione.
Firma
defineCollection(name: string, config: CollectionOptions): CollectionOptionsParametri
| Parametro | Tipo | Valore predefinito | Descrizione |
|---|---|---|---|
collectionOptions | CollectionOptions | - | Uguale a tutti i parametri di db.collection() |
Esempio
Per un file di configurazione di collezione da importare tramite db.import():
extendCollection()Estende il contenuto di configurazione di una collezione già in memoria, principalmente per i contenuti di file importati tramite il metodo import(). Questo metodo è un metodo di alto livello esportato dal pacchetto @nocobase/database e non viene chiamato tramite un'istanza del database. Può essere utilizzato anche l'alias extend.
Firma
extendCollection(collectionOptions: CollectionOptions, mergeOptions?: MergeOptions): ExtendedCollectionOptionsParametri
| Parametro | Tipo | Valore predefinito | Descrizione |
|---|---|---|---|
collectionOptions | CollectionOptions | - | Uguale a tutti i parametri di db.collection() |
mergeOptions? | MergeOptions | - | Parametri per il pacchetto npm deepmerge |
Esempio
Definizione originale della collezione di libri (books.ts):
Definizione estesa della collezione di libri (books.extend.ts):
Se i due file sopra vengono importati richiamando import(), dopo essere stati nuovamente estesi con extend(), la collezione dei libri avrà entrambi i campi title e price.
Questo metodo è molto utile per estendere le strutture delle collezioni già definite dai plugin esistenti.
Il database attiva i seguenti eventi corrispondenti in diverse fasi del suo ciclo di vita. Iscrivendosi ad essi con il metodo on() è possibile effettuare elaborazioni specifiche per soddisfare determinate esigenze aziendali.
'beforeSync' / 'afterSync'Attivato prima e dopo che una nuova configurazione della struttura della collezione (campi, indici, ecc.) viene sincronizzata con il database. Di solito viene attivato quando viene eseguito collection.sync() (chiamata interna) ed è generalmente utilizzato per gestire la logica di estensioni speciali dei campi.
Firma
Tipo
Esempio
'beforeValidate' / 'afterValidate'Prima di creare o aggiornare i dati, avviene un processo di validazione basato sulle regole definite nella collezione. Gli eventi corrispondenti vengono attivati prima e dopo la validazione. Questo viene attivato quando viene richiamato repository.create() o repository.update().
Firma
Tipo
Esempio
'beforeCreate' / 'afterCreate'Gli eventi corrispondenti vengono attivati prima e dopo la creazione di un record. Questo viene attivato quando viene richiamato repository.create().
Firma
Tipo
Esempio
'beforeUpdate' / 'afterUpdate'Gli eventi corrispondenti vengono attivati prima e dopo l'aggiornamento di un record. Questo viene attivato quando viene richiamato repository.update().
Firma
Tipo
Esempio
'beforeSave' / 'afterSave'Gli eventi corrispondenti vengono attivati prima e dopo la creazione o l'aggiornamento di un record. Questo viene attivato quando viene richiamato repository.create() o repository.update().
Firma
Tipo
Esempio
'beforeDestroy' / 'afterDestroy'Gli eventi corrispondenti vengono attivati prima e dopo l'eliminazione di un record. Questo viene attivato quando viene richiamato repository.destroy().
Firma
Tipo
Esempio
'afterCreateWithAssociations'Questo evento viene attivato dopo la creazione di un record con dati di associazione gerarchica. Viene attivato quando viene richiamato repository.create().
Firma
Tipo
Esempio
'afterUpdateWithAssociations'Questo evento viene attivato dopo l'aggiornamento di un record con dati di associazione gerarchica. Viene attivato quando viene richiamato repository.update().
Firma
Tipo
Esempio
'afterSaveWithAssociations'Questo evento viene attivato dopo la creazione o l'aggiornamento di un record con dati di associazione gerarchica. Viene attivato quando viene richiamato repository.create() o repository.update().
Firma
Tipo
Esempio
'beforeDefineCollection'Attivato prima che una collezione venga definita, ad esempio quando viene richiamato db.collection().
Nota: Questo è un evento sincrono.
Firma
Tipo
Esempio
'afterDefineCollection'Attivato dopo che una collezione viene definita, ad esempio quando viene richiamato db.collection().
Nota: Questo è un evento sincrono.
Firma
Tipo
Esempio
'beforeRemoveCollection' / 'afterRemoveCollection'Attivato prima e dopo che una collezione viene rimossa dalla memoria, ad esempio quando viene richiamato db.removeCollection().
Nota: Questo è un evento sincrono.
Firma
Tipo
Esempio