Diese Dokumentation wurde automatisch von KI übersetzt.
Die Datenbank ist ein von NocoBase bereitgestelltes Tool zur Datenbankinteraktion, das No-Code- und Low-Code-Anwendungen sehr komfortable Funktionen für die Datenbankinteraktion bietet. Derzeit werden folgende Datenbanken unterstützt:
Im Database-Konstruktor können Sie die Datenbankverbindung konfigurieren, indem Sie den Parameter options übergeben.
Detaillierte Konfigurationsparameter finden Sie unter Konstruktor.
Database definiert die Datenbankstruktur über Sammlung (Collection). Ein Sammlung-Objekt repräsentiert eine Tabelle in der Datenbank.
Nachdem die Datenbankstruktur definiert wurde, können Sie die Methode sync() verwenden, um die Datenbankstruktur zu synchronisieren.
Eine detailliertere Verwendung von Sammlung finden Sie unter Sammlung.
Database führt Datenoperationen über Repository aus.
Eine detailliertere Verwendung von Daten-CRUD finden Sie unter Repository.
Signatur
constructor(options: DatabaseOptions)Erstellt eine Datenbankinstanz.
Parameter
| Parametername | Typ | Standardwert | Beschreibung |
|---|---|---|---|
options.host | string | 'localhost' | Datenbank-Host |
options.port | number | - | Datenbank-Service-Port, mit einem entsprechenden Standard-Port je nach verwendeter Datenbank |
options.username | string | - | Datenbank-Benutzername |
options.password | string | - | Datenbank-Passwort |
options.database | string | - | Datenbankname |
options.dialect | string | 'mysql' | Datenbanktyp |
options.storage? | string | ':memory:' | Speichermodus für SQLite |
options.logging? | boolean | false | Ob die Protokollierung aktiviert werden soll |
options.define? | Object | {} | Standardparameter für die Tabellendefinition |
options.tablePrefix? | string | '' | NocoBase-Erweiterung, Tabellenpräfix |
options.migrator? | UmzugOptions | {} | NocoBase-Erweiterung, Parameter für den Migrationsmanager, siehe Umzug Implementierung |
addMigration()Fügt eine einzelne Migrationsdatei hinzu.
Signatur
addMigration(options: MigrationItem)Parameter
| Parametername | Typ | Standardwert | Beschreibung |
|---|---|---|---|
options.name | string | - | Name der Migrationsdatei |
options.context? | string | - | Kontext der Migrationsdatei |
options.migration? | typeof Migration | - | Benutzerdefinierte Klasse für die Migrationsdatei |
options.up | Function | - | up-Methode der Migrationsdatei |
options.down | Function | - | down-Methode der Migrationsdatei |
Beispiel
addMigrations()Fügt Migrationsdateien aus einem angegebenen Verzeichnis hinzu.
Signatur
addMigrations(options: AddMigrationsOptions): voidParameter
| Parametername | Typ | Standardwert | Beschreibung |
|---|---|---|---|
options.directory | string | '' | Verzeichnis der Migrationsdateien |
options.extensions | string[] | ['js', 'ts'] | Dateierweiterungen |
options.namespace? | string | '' | Namespace |
options.context? | Object | { db } | Kontext der Migrationsdatei |
Beispiel
inDialect()Prüft, ob der aktuelle Datenbanktyp einem der angegebenen Typen entspricht.
Signatur
inDialect(dialect: string[]): booleanParameter
| Parametername | Typ | Standardwert | Beschreibung |
|---|---|---|---|
dialect | string[] | - | Datenbanktyp, mögliche Werte sind mysql/postgres/mariadb |
getTablePrefix()Ruft das Tabellenpräfix aus der Konfiguration ab.
Signatur
getTablePrefix(): stringcollection()Definiert eine Sammlung. Dieser Aufruf ähnelt der define-Methode von Sequelize und erstellt die Tabellenstruktur nur im Speicher. Um sie in der Datenbank zu persistieren, müssen Sie die sync-Methode aufrufen.
Signatur
collection(options: CollectionOptions): CollectionParameter
Alle options-Konfigurationsparameter stimmen mit dem Konstruktor der Sammlung-Klasse überein, siehe Sammlung.
Ereignisse
'beforeDefineCollection': Wird vor der Definition einer Sammlung ausgelöst.'afterDefineCollection': Wird nach der Definition einer Sammlung ausgelöst.Beispiel
getCollection()Ruft eine definierte Sammlung ab.
Signatur
getCollection(name: string): CollectionParameter
| Parametername | Typ | Standardwert | Beschreibung |
|---|---|---|---|
name | string | - | Sammlungsname |
Beispiel
hasCollection()Prüft, ob eine bestimmte Sammlung definiert wurde.
Signatur
hasCollection(name: string): booleanParameter
| Parametername | Typ | Standardwert | Beschreibung |
|---|---|---|---|
name | string | - | Sammlungsname |
Beispiel
removeCollection()Entfernt eine definierte Sammlung. Sie wird nur aus dem Speicher entfernt; um die Änderung zu persistieren, müssen Sie die sync-Methode aufrufen.
Signatur
removeCollection(name: string): voidParameter
| Parametername | Typ | Standardwert | Beschreibung |
|---|---|---|---|
name | string | - | Sammlungsname |
Ereignisse
'beforeRemoveCollection': Wird vor dem Entfernen einer Sammlung ausgelöst.'afterRemoveCollection': Wird nach dem Entfernen einer Sammlung ausgelöst.Beispiel
import()Importiert alle Dateien in einem Verzeichnis als Sammlungs-Konfigurationen in den Speicher.
Signatur
async import(options: { directory: string; extensions?: ImportFileExtension[] }): Promise<Map<string, Collection>>Parameter
| Parametername | Typ | Standardwert | Beschreibung |
|---|---|---|---|
options.directory | string | - | Pfad des zu importierenden Verzeichnisses |
options.extensions | string[] | ['ts', 'js'] | Nach bestimmten Dateiendungen suchen |
Beispiel
Die in der Datei ./collections/books.ts definierte Sammlung sieht wie folgt aus:
Importieren Sie die entsprechende Konfiguration, wenn das Plugin geladen wird:
registerFieldTypes()Registriert benutzerdefinierte Feldtypen.
Signatur
registerFieldTypes(fieldTypes: MapOf<typeof Field>): voidParameter
fieldTypes ist ein Schlüssel-Wert-Paar, wobei der Schlüssel der Feldtypname und der Wert die Feldtypklasse ist.
Beispiel
registerModels()Registriert benutzerdefinierte Datenmodellklassen.
Signatur
registerModels(models: MapOf<ModelStatic<any>>): voidParameter
models ist ein Schlüssel-Wert-Paar, wobei der Schlüssel der Modellname und der Wert die Modellklasse ist.
Beispiel
registerRepositories()Registriert benutzerdefinierte Repository-Klassen.
Signatur
registerRepositories(repositories: MapOf<RepositoryType>): voidParameter
repositories ist ein Schlüssel-Wert-Paar, wobei der Schlüssel der Repository-Name und der Wert die Repository-Klasse ist.
Beispiel
registerOperators()Registriert benutzerdefinierte Datenabfrage-Operatoren.
Signatur
registerOperators(operators: MapOf<OperatorFunc>)Parameter
operators ist ein Schlüssel-Wert-Paar, wobei der Schlüssel der Operatorname und der Wert die Funktion ist, die die Vergleichsanweisung generiert.
Beispiel
getModel()Ruft eine definierte Datenmodellklasse ab. Wenn zuvor keine benutzerdefinierte Modellklasse registriert wurde, wird die Standard-Modellklasse von Sequelize zurückgegeben. Der Standardname ist derselbe wie der Name der Sammlung.
Signatur
getModel(name: string): ModelParameter
| Parametername | Typ | Standardwert | Beschreibung |
|---|---|---|---|
name | string | - | Registrierter Modellname |
Beispiel
Hinweis: Die aus einer Sammlung abgerufene Modellklasse ist nicht streng identisch mit der registrierten Modellklasse, sondern erbt von dieser. Da die Eigenschaften der Sequelize-Modellklasse während der Initialisierung geändert werden, handhabt NocoBase diese Vererbungsbeziehung automatisch. Abgesehen von der Ungleichheit der Klassen können alle anderen Definitionen normal verwendet werden.
getRepository()Ruft eine benutzerdefinierte Repository-Klasse ab. Wenn zuvor keine benutzerdefinierte Repository-Klasse registriert wurde, wird die Standard-Repository-Klasse von NocoBase zurückgegeben. Der Standardname ist derselbe wie der Name der Sammlung.
Repository-Klassen werden hauptsächlich für CRUD-Operationen basierend auf Datenmodellen verwendet, siehe Repository.
Signatur
getRepository(name: string): RepositorygetRepository(name: string, relationId?: string | number): RepositoryParameter
| Parametername | Typ | Standardwert | Beschreibung |
|---|---|---|---|
name | string | - | Registrierter Repository-Name |
relationId | string | number | - | Fremdschlüsselwert für relationale Daten |
Wenn der Name ein assoziierter Name wie 'tables.relations' ist, wird die zugehörige Repository-Klasse zurückgegeben. Wenn der zweite Parameter angegeben wird, basiert das Repository bei der Verwendung (Abfragen, Aktualisieren usw.) auf dem Fremdschlüsselwert der relationalen Daten.
Beispiel
Angenommen, es gibt zwei Sammlungen, Beiträge und Autoren, und die Beitragssammlung hat einen Fremdschlüssel, der auf die Autorensammlung verweist:
on()Lauscht auf Datenbank-Ereignisse.
Signatur
on(event: string, listener: (...args: any[]) => void | Promise<void>): voidParameter
| Parametername | Typ | Standardwert | Beschreibung |
|---|---|---|---|
| event | string | - | Ereignisname |
| listener | Function | - | Ereignis-Listener |
Die Ereignisnamen unterstützen standardmäßig die Model-Ereignisse von Sequelize. Für globale Ereignisse lauschen Sie im Format <sequelize_model_global_event>, und für einzelne Model-Ereignisse im Format <model_name>.<sequelize_model_event>.
Parameterbeschreibungen und detaillierte Beispiele für alle integrierten Ereignistypen finden Sie im Abschnitt Integrierte Ereignisse.
off()Entfernt eine Ereignis-Listener-Funktion.
Signatur
off(name: string, listener: Function)Parameter
| Parametername | Typ | Standardwert | Beschreibung |
|---|---|---|---|
| name | string | - | Ereignisname |
| listener | Function | - | Ereignis-Listener |
Beispiel
auth()Datenbankverbindungsauthentifizierung. Kann verwendet werden, um sicherzustellen, dass die Anwendung eine Verbindung zu den Daten hergestellt hat.
Signatur
auth(options: QueryOptions & { retry?: number } = {}): Promise<boolean>Parameter
| Parametername | Typ | Standardwert | Beschreibung |
|---|---|---|---|
options? | Object | - | Authentifizierungsoptionen |
options.retry? | number | 10 | Anzahl der Wiederholungsversuche bei fehlgeschlagener Authentifizierung |
options.transaction? | Transaction | - | Transaktionsobjekt |
options.logging? | boolean | Function | false | Ob Protokolle ausgegeben werden sollen |
Beispiel
reconnect()Stellt die Verbindung zur Datenbank wieder her.
Beispiel
closed()Prüft, ob die Datenbankverbindung geschlossen ist.
Signatur
closed(): booleanclose()Schließt die Datenbankverbindung. Entspricht sequelize.close().
sync()Synchronisiert die Datenbanktabellenstruktur. Entspricht sequelize.sync(), Parameter finden Sie in der Sequelize-Dokumentation.
clean()Bereinigt die Datenbank und löscht alle Sammlungen.
Signatur
clean(options: CleanOptions): Promise<void>Parameter
| Parametername | Typ | Standardwert | Beschreibung |
|---|---|---|---|
options.drop | boolean | false | Ob alle Sammlungen gelöscht werden sollen |
options.skip | string[] | - | Konfiguration der zu überspringenden Sammlungsnamen |
options.transaction | Transaction | - | Transaktionsobjekt |
Beispiel
Entfernt alle Sammlungen außer der users-Sammlung.
defineCollection()Erstellt den Konfigurationsinhalt für eine Sammlung.
Signatur
defineCollection(name: string, config: CollectionOptions): CollectionOptionsParameter
| Parametername | Typ | Standardwert | Beschreibung |
|---|---|---|---|
collectionOptions | CollectionOptions | - | Identisch mit allen Parametern von db.collection() |
Beispiel
Für eine Sammlungs-Konfigurationsdatei, die von db.import() importiert werden soll:
extendCollection()Erweitert den Konfigurationsinhalt einer bereits im Speicher befindlichen Sammlungsstruktur, hauptsächlich für Dateiinhalte, die von der import()-Methode importiert wurden. Diese Methode ist eine Top-Level-Methode, die vom @nocobase/database-Paket exportiert wird und nicht über eine Datenbankinstanz aufgerufen wird. Der Alias extend kann ebenfalls verwendet werden.
Signatur
extendCollection(collectionOptions: CollectionOptions, mergeOptions?: MergeOptions): ExtendedCollectionOptionsParameter
| Parametername | Typ | Standardwert | Beschreibung |
|---|---|---|---|
collectionOptions | CollectionOptions | - | Identisch mit allen Parametern von db.collection() |
mergeOptions? | MergeOptions | - | Parameter für das npm-Paket deepmerge |
Beispiel
Ursprüngliche Definition der books-Sammlung (books.ts):
Erweiterte Definition der books-Sammlung (books.extend.ts):
Wenn die beiden oben genannten Dateien beim Aufruf von import() importiert und anschließend mit extend() erneut erweitert werden, verfügt die books-Sammlung über die Felder title und price.
Diese Methode ist sehr nützlich, um Sammlungsstrukturen zu erweitern, die bereits von bestehenden Plugins definiert wurden.
Die Datenbank löst in den entsprechenden Lebenszyklen die folgenden Ereignisse aus. Durch das Abonnieren dieser Ereignisse mit der on()-Methode können spezifische Verarbeitungen vorgenommen werden, um bestimmte Geschäftsanforderungen zu erfüllen.
'beforeSync' / 'afterSync'Wird vor und nach der Synchronisierung einer neuen Sammlungsstrukturkonfiguration (Felder, Indizes usw.) mit der Datenbank ausgelöst. Dies geschieht normalerweise bei der Ausführung von collection.sync() (interner Aufruf) und wird im Allgemeinen zur logischen Verarbeitung spezieller Felderweiterungen verwendet.
Signatur
Typ
Beispiel
'beforeValidate' / 'afterValidate'Vor dem Erstellen oder Aktualisieren von Daten findet ein Validierungsprozess statt, der auf den in der Sammlung definierten Regeln basiert. Entsprechende Ereignisse werden vor und nach der Validierung ausgelöst. Dies geschieht beim Aufruf von repository.create() oder repository.update().
Signatur
Typ
Beispiel
'beforeCreate' / 'afterCreate'Entsprechende Ereignisse werden vor und nach dem Erstellen eines Datensatzes ausgelöst. Dies geschieht beim Aufruf von repository.create().
Signatur
Typ
Beispiel
'beforeUpdate' / 'afterUpdate'Entsprechende Ereignisse werden vor und nach dem Aktualisieren eines Datensatzes ausgelöst. Dies geschieht beim Aufruf von repository.update().
Signatur
Typ
Beispiel
'beforeSave' / 'afterSave'Entsprechende Ereignisse werden vor und nach dem Erstellen oder Aktualisieren eines Datensatzes ausgelöst. Dies geschieht beim Aufruf von repository.create() oder repository.update().
Signatur
Typ
Beispiel
'beforeDestroy' / 'afterDestroy'Entsprechende Ereignisse werden vor und nach dem Löschen eines Datensatzes ausgelöst. Dies geschieht beim Aufruf von repository.destroy().
Signatur
Typ
Beispiel
'afterCreateWithAssociations'Dieses Ereignis wird nach dem Erstellen eines Datensatzes mit hierarchischen Assoziationsdaten ausgelöst. Dies geschieht beim Aufruf von repository.create().
Signatur
Typ
Beispiel
'afterUpdateWithAssociations'Dieses Ereignis wird nach dem Aktualisieren eines Datensatzes mit hierarchischen Assoziationsdaten ausgelöst. Dies geschieht beim Aufruf von repository.update().
Signatur
Typ
Beispiel
'afterSaveWithAssociations'Dieses Ereignis wird nach dem Erstellen oder Aktualisieren eines Datensatzes mit hierarchischen Assoziationsdaten ausgelöst. Dies geschieht beim Aufruf von repository.create() oder repository.update().
Signatur
Typ
Beispiel
'beforeDefineCollection'Wird ausgelöst, bevor eine Sammlung definiert wird, z. B. beim Aufruf von db.collection().
Hinweis: Dies ist ein synchrones Ereignis.
Signatur
Typ
Beispiel
'afterDefineCollection'Wird ausgelöst, nachdem eine Sammlung definiert wurde, z. B. beim Aufruf von db.collection().
Hinweis: Dies ist ein synchrones Ereignis.
Signatur
Typ
Beispiel
'beforeRemoveCollection' / 'afterRemoveCollection'Wird ausgelöst, bevor und nachdem eine Sammlung aus dem Speicher entfernt wird, z. B. beim Aufruf von db.removeCollection().
Hinweis: Dies ist ein synchrones Ereignis.
Signatur
Typ
Beispiel