Diese Dokumentation wurde automatisch von KI übersetzt.
Datenbank
Übersicht
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:
- SQLite 3.8.8+
- MySQL 8.0.17+
- PostgreSQL 10.0+
Datenbank verbinden
Im Database-Konstruktor können Sie die Datenbankverbindung konfigurieren, indem Sie den Parameter options übergeben.
Detaillierte Konfigurationsparameter finden Sie unter Konstruktor.
Datenmodell-Definition
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.
Daten lesen/schreiben
Database führt Datenoperationen über Repository aus.
Eine detailliertere Verwendung von Daten-CRUD finden Sie unter Repository.
Konstruktor
Signatur
constructor(options: DatabaseOptions)
Erstellt eine Datenbankinstanz.
Parameter
Migrationsbezogene Methoden
addMigration()
Fügt eine einzelne Migrationsdatei hinzu.
Signatur
addMigration(options: MigrationItem)
Parameter
Beispiel
addMigrations()
Fügt Migrationsdateien aus einem angegebenen Verzeichnis hinzu.
Signatur
addMigrations(options: AddMigrationsOptions): void
Parameter
Beispiel
Hilfsmethoden
inDialect()
Prüft, ob der aktuelle Datenbanktyp einem der angegebenen Typen entspricht.
Signatur
inDialect(dialect: string[]): boolean
Parameter
getTablePrefix()
Ruft das Tabellenpräfix aus der Konfiguration ab.
Signatur
getTablePrefix(): string
Sammlungs-Konfiguration
collection()
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): Collection
Parameter
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): Collection
Parameter
Beispiel
hasCollection()
Prüft, ob eine bestimmte Sammlung definiert wurde.
Signatur
hasCollection(name: string): boolean
Parameter
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): void
Parameter
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
Beispiel
Die in der Datei ./collections/books.ts definierte Sammlung sieht wie folgt aus:
Importieren Sie die entsprechende Konfiguration, wenn das Plugin geladen wird:
Erweiterungsregistrierung und -abruf
registerFieldTypes()
Registriert benutzerdefinierte Feldtypen.
Signatur
registerFieldTypes(fieldTypes: MapOf<typeof Field>): void
Parameter
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>>): void
Parameter
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>): void
Parameter
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): Model
Parameter
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): Repository
Parameter
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:
Datenbank-Ereignisse
on()
Lauscht auf Datenbank-Ereignisse.
Signatur
on(event: string, listener: (...args: any[]) => void | Promise<void>): void
Parameter
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
Beispiel
Datenbankoperationen
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
Beispiel
reconnect()
Stellt die Verbindung zur Datenbank wieder her.
Beispiel
closed()
Prüft, ob die Datenbankverbindung geschlossen ist.
Signatur
closed(): boolean
close()
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
Beispiel
Entfernt alle Sammlungen außer der users-Sammlung.
Paketweite Exporte
defineCollection()
Erstellt den Konfigurationsinhalt für eine Sammlung.
Signatur
defineCollection(name: string, config: CollectionOptions): CollectionOptions
Parameter
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): ExtendedCollectionOptions
Parameter
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.
Integrierte Ereignisse
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

