Ten dokument został przetłumaczony przez AI. W przypadku niedokładności, proszę odnieść się do wersji angielskiej
Baza danych to narzędzie do interakcji z bazami danych oferowane przez NocoBase, które zapewnia niezwykle wygodne funkcje interakcji z bazą danych dla aplikacji no-code i low-code. Obecnie obsługiwane bazy danych to:
W konstruktorze Database mogą Państwo skonfigurować połączenie z bazą danych, przekazując parametr options.
Szczegółowe parametry konfiguracji znajdą Państwo w sekcji Konstruktor.
Database definiuje strukturę bazy danych za pomocą kolekcji. Obiekt kolekcja reprezentuje tabelę w bazie danych.
Po zdefiniowaniu struktury bazy danych mogą Państwo użyć metody sync() do jej synchronizacji.
Bardziej szczegółowe informacje na temat użycia kolekcji znajdą Państwo w sekcji Kolekcja.
Database operuje na danych za pośrednictwem Repository.
Bardziej szczegółowe informacje na temat operacji CRUD na danych znajdą Państwo w sekcji Repository.
Sygnatura
constructor(options: DatabaseOptions)Tworzy instancję bazy danych.
Parametry
| Parametr | Typ | Wartość domyślna | Opis |
|---|---|---|---|
options.host | string | 'localhost' | Host bazy danych |
options.port | number | - | Port usługi bazy danych, z domyślnym portem odpowiadającym używanej bazie danych |
options.username | string | - | Nazwa użytkownika bazy danych |
options.password | string | - | Hasło bazy danych |
options.database | string | - | Nazwa bazy danych |
options.dialect | string | 'mysql' | Typ bazy danych |
options.storage? | string | ':memory:' | Tryb przechowywania danych dla SQLite |
options.logging? | boolean | false | Czy włączyć logowanie |
options.define? | Object | {} | Domyślne parametry definicji tabeli |
options.tablePrefix? | string | '' | Rozszerzenie NocoBase, prefiks nazwy tabeli |
options.migrator? | UmzugOptions | {} | Rozszerzenie NocoBase, parametry związane z menedżerem migracji, proszę zapoznać się z implementacją Umzug |
addMigration()Dodaje pojedynczy plik migracji.
Sygnatura
addMigration(options: MigrationItem)Parametry
| Parametr | Typ | Wartość domyślna | Opis |
|---|---|---|---|
options.name | string | - | Nazwa pliku migracji |
options.context? | string | - | Kontekst pliku migracji |
options.migration? | typeof Migration | - | Niestandardowa klasa dla pliku migracji |
options.up | Function | - | Metoda up pliku migracji |
options.down | Function | - | Metoda down pliku migracji |
Przykład
addMigrations()Dodaje pliki migracji z określonego katalogu.
Sygnatura
addMigrations(options: AddMigrationsOptions): voidParametry
| Parametr | Typ | Wartość domyślna | Opis |
|---|---|---|---|
options.directory | string | '' | Katalog, w którym znajdują się pliki migracji |
options.extensions | string[] | ['js', 'ts'] | Rozszerzenia plików |
options.namespace? | string | '' | Przestrzeń nazw |
options.context? | Object | { db } | Kontekst pliku migracji |
Przykład
inDialect()Sprawdza, czy bieżący typ bazy danych jest jednym z określonych typów.
Sygnatura
inDialect(dialect: string[]): booleanParametry
| Parametr | Typ | Wartość domyślna | Opis |
|---|---|---|---|
dialect | string[] | - | Typ bazy danych, możliwe wartości to mysql/postgres/mariadb |
getTablePrefix()Pobiera prefiks nazwy tabeli z konfiguracji.
Sygnatura
getTablePrefix(): stringcollection()Definiuje kolekcję. To wywołanie jest podobne do metody define w Sequelize, tworząc strukturę tabeli tylko w pamięci. Aby utrwalić ją w bazie danych, należy wywołać metodę sync.
Sygnatura
collection(options: CollectionOptions): CollectionParametry
Wszystkie parametry konfiguracji options są zgodne z konstruktorem klasy kolekcja, proszę zapoznać się z sekcją Kolekcja.
Zdarzenia
'beforeDefineCollection': Wywoływane przed zdefiniowaniem kolekcji.'afterDefineCollection': Wywoływane po zdefiniowaniu kolekcji.Przykład
getCollection()Pobiera zdefiniowaną kolekcję.
Sygnatura
getCollection(name: string): CollectionParametry
| Parametr | Typ | Wartość domyślna | Opis |
|---|---|---|---|
name | string | - | Nazwa kolekcji |
Przykład
hasCollection()Sprawdza, czy określona kolekcja została zdefiniowana.
Sygnatura
hasCollection(name: string): booleanParametry
| Parametr | Typ | Wartość domyślna | Opis |
|---|---|---|---|
name | string | - | Nazwa kolekcji |
Przykład
removeCollection()Usuwa zdefiniowaną kolekcję. Jest ona usuwana tylko z pamięci; aby utrwalić zmianę, należy wywołać metodę sync.
Sygnatura
removeCollection(name: string): voidParametry
| Parametr | Typ | Wartość domyślna | Opis |
|---|---|---|---|
name | string | - | Nazwa kolekcji |
Zdarzenia
'beforeRemoveCollection': Wywoływane przed usunięciem kolekcji.'afterRemoveCollection': Wywoływane po usunięciu kolekcji.Przykład
import()Importuje wszystkie pliki z katalogu jako konfiguracje kolekcji do pamięci.
Sygnatura
async import(options: { directory: string; extensions?: ImportFileExtension[] }): Promise<Map<string, Collection>>Parametry
| Parametr | Typ | Wartość domyślna | Opis |
|---|---|---|---|
options.directory | string | - | Ścieżka do katalogu do zaimportowania |
options.extensions | string[] | ['ts', 'js'] | Skanuj w poszukiwaniu określonych rozszerzeń |
Przykład
kolekcja zdefiniowana w pliku ./collections/books.ts wygląda następująco:
Importowanie odpowiedniej konfiguracji podczas ładowania wtyczki:
registerFieldTypes()Rejestruje niestandardowe typy pól.
Sygnatura
registerFieldTypes(fieldTypes: MapOf<typeof Field>): voidParametry
fieldTypes to para klucz-wartość, gdzie kluczem jest nazwa typu pola, a wartością jest klasa typu pola.
Przykład
registerModels()Rejestruje niestandardowe klasy modeli danych.
Sygnatura
registerModels(models: MapOf<ModelStatic<any>>): voidParametry
models to para klucz-wartość, gdzie kluczem jest nazwa modelu danych, a wartością jest klasa modelu danych.
Przykład
registerRepositories()Rejestruje niestandardowe klasy repozytoriów danych.
Sygnatura
registerRepositories(repositories: MapOf<RepositoryType>): voidParametry
repositories to para klucz-wartość, gdzie kluczem jest nazwa repozytorium danych, a wartością jest klasa repozytorium danych.
Przykład
registerOperators()Rejestruje niestandardowe operatory zapytań danych.
Sygnatura
registerOperators(operators: MapOf<OperatorFunc>)Parametry
operators to para klucz-wartość, gdzie kluczem jest nazwa operatora, a wartością jest funkcja generująca instrukcję porównania operatora.
Przykład
getModel()Pobiera zdefiniowaną klasę modelu danych. Jeśli wcześniej nie zarejestrowano niestandardowej klasy modelu, zostanie zwrócona domyślna klasa modelu Sequelize. Domyślna nazwa jest taka sama jak nazwa zdefiniowanej kolekcji.
Sygnatura
getModel(name: string): ModelParametry
| Parametr | Typ | Wartość domyślna | Opis |
|---|---|---|---|
name | string | - | Nazwa zarejestrowanego modelu |
Przykład
Uwaga: Klasa modelu uzyskana z kolekcji nie jest ściśle równa zarejestrowanej klasie modelu, lecz dziedziczy po niej. Ponieważ właściwości klasy modelu Sequelize są modyfikowane podczas inicjalizacji, NocoBase automatycznie obsługuje tę relację dziedziczenia. Poza nierównością klas, wszystkie inne definicje mogą być używane normalnie.
getRepository()Pobiera niestandardową klasę repozytorium danych. Jeśli wcześniej nie zarejestrowano niestandardowej klasy repozytorium danych, zostanie zwrócona domyślna klasa repozytorium danych NocoBase. Domyślna nazwa jest taka sama jak nazwa zdefiniowanej kolekcji.
Klasy repozytoriów danych są używane głównie do operacji CRUD opartych na modelach danych, proszę zapoznać się z sekcją Repository.
Sygnatura
getRepository(name: string): RepositorygetRepository(name: string, relationId?: string | number): RepositoryParametry
| Parametr | Typ | Wartość domyślna | Opis |
|---|---|---|---|
name | string | - | Nazwa zarejestrowanego repozytorium danych |
relationId | string | number | - | Wartość klucza obcego dla danych relacyjnych |
Gdy nazwa ma postać nazwy powiązanej, np. 'tables.relations', zostanie zwrócona powiązana klasa repozytorium danych. Jeśli podano drugi parametr, repozytorium danych będzie używane (zapytania, modyfikacje itp.) w oparciu o wartość klucza obcego danych relacyjnych.
Przykład
Załóżmy, że istnieją dwie kolekcje: posty i autorzy, a kolekcja postów posiada klucz obcy wskazujący na kolekcję autorów:
on()Nasłuchuje zdarzeń bazy danych.
Sygnatura
on(event: string, listener: (...args: any[]) => void | Promise<void>): voidParametry
| Parametr | Typ | Wartość domyślna | Opis |
|---|---|---|---|
| event | string | - | Nazwa zdarzenia |
| listener | Function | - | Słuchacz zdarzeń |
Nazwy zdarzeń domyślnie obsługują zdarzenia modelu Sequelize. W przypadku zdarzeń globalnych nasłuchujemy ich, używając formatu <sequelize_model_global_event>, a w przypadku zdarzeń pojedynczego modelu, używając formatu <model_name>.<sequelize_model_event>.
Opisy parametrów i szczegółowe przykłady wszystkich wbudowanych typów zdarzeń znajdą Państwo w sekcji Wbudowane zdarzenia.
off()Usuwa funkcję nasłuchującą zdarzeń.
Sygnatura
off(name: string, listener: Function)Parametry
| Parametr | Typ | Wartość domyślna | Opis |
|---|---|---|---|
| name | string | - | Nazwa zdarzenia |
| listener | Function | - | Słuchacz zdarzeń |
Przykład
auth()Uwierzytelnianie połączenia z bazą danych. Może być używane do upewnienia się, że aplikacja nawiązała połączenie z danymi.
Sygnatura
auth(options: QueryOptions & { retry?: number } = {}): Promise<boolean>Parametry
| Parametr | Typ | Wartość domyślna | Opis |
|---|---|---|---|
options? | Object | - | Opcje uwierzytelniania |
options.retry? | number | 10 | Liczba ponownych prób w przypadku niepowodzenia uwierzytelniania |
options.transaction? | Transaction | - | Obiekt transakcji |
options.logging? | boolean | Function | false | Czy drukować logi |
Przykład
reconnect()Ponownie łączy się z bazą danych.
Przykład
closed()Sprawdza, czy połączenie z bazą danych zostało zamknięte.
Sygnatura
closed(): booleanclose()Zamyka połączenie z bazą danych. Odpowiednik sequelize.close().
sync()Synchronizuje strukturę kolekcji bazy danych. Odpowiednik sequelize.sync(), parametry znajdą Państwo w dokumentacji Sequelize.
clean()Czyści bazę danych, usuwając wszystkie kolekcje.
Sygnatura
clean(options: CleanOptions): Promise<void>Parametry
| Parametr | Typ | Wartość domyślna | Opis |
|---|---|---|---|
options.drop | boolean | false | Czy usunąć wszystkie kolekcje |
options.skip | string[] | - | Konfiguracja nazw kolekcji do pominięcia |
options.transaction | Transaction | - | Obiekt transakcji |
Przykład
Usuwa wszystkie kolekcje z wyjątkiem kolekcji users.
defineCollection()Tworzy zawartość konfiguracji kolekcji.
Sygnatura
defineCollection(name: string, config: CollectionOptions): CollectionOptionsParametry
| Parametr | Typ | Wartość domyślna | Opis |
|---|---|---|---|
collectionOptions | CollectionOptions | - | Takie same jak wszystkie parametry db.collection() |
Przykład
Dla pliku konfiguracyjnego kolekcji, który ma zostać zaimportowany przez db.import():
extendCollection()Rozszerza zawartość konfiguracji struktury kolekcji już znajdującej się w pamięci, głównie dla zawartości plików importowanych metodą import(). Ta metoda jest metodą najwyższego poziomu eksportowaną przez pakiet @nocobase/database i nie jest wywoływana przez instancję db. Można również użyć aliasu extend.
Sygnatura
extendCollection(collectionOptions: CollectionOptions, mergeOptions?: MergeOptions): ExtendedCollectionOptionsParametry
| Parametr | Typ | Wartość domyślna | Opis |
|---|---|---|---|
collectionOptions | CollectionOptions | - | Takie same jak wszystkie parametry db.collection() |
mergeOptions? | MergeOptions | - | Parametry dla pakietu npm deepmerge |
Przykład
Oryginalna definicja kolekcji książek (books.ts):
Rozszerzona definicja kolekcji książek (books.extend.ts):
Jeśli powyższe dwa pliki zostaną zaimportowane podczas wywołania import(), a następnie ponownie rozszerzone za pomocą extend(), kolekcja książek będzie posiadała pola title i price.
Ta metoda jest bardzo przydatna do rozszerzania struktur kolekcji już zdefiniowanych przez istniejące wtyczki.
Baza danych wywołuje następujące zdarzenia w odpowiednich fazach swojego cyklu życia. Subskrybowanie ich za pomocą metody on() pozwala na specyficzne przetwarzanie, które może zaspokoić pewne potrzeby biznesowe.
'beforeSync' / 'afterSync'Wywoływane przed i po synchronizacji nowej konfiguracji struktury kolekcji (pól, indeksów itp.) z bazą danych. Zazwyczaj jest wywoływane podczas wykonywania collection.sync() (wywołanie wewnętrzne) i jest ogólnie używane do obsługi logiki dla specjalnych rozszerzeń pól.
Sygnatura
Typ
Przykład
'beforeValidate' / 'afterValidate'Przed utworzeniem lub aktualizacją danych następuje proces walidacji danych oparty na regułach zdefiniowanych w kolekcji. Odpowiednie zdarzenia są wywoływane przed i po walidacji. Jest to wywoływane podczas wywołania repository.create() lub repository.update().
Sygnatura
Typ
Przykład
'beforeCreate' / 'afterCreate'Odpowiednie zdarzenia są wywoływane przed i po utworzeniu rekordu. Jest to wywoływane podczas wywołania repository.create().
Sygnatura
Typ
Przykład
'beforeUpdate' / 'afterUpdate'Odpowiednie zdarzenia są wywoływane przed i po aktualizacji rekordu. Jest to wywoływane podczas wywołania repository.update().
Sygnatura
Typ
Przykład
'beforeSave' / 'afterSave'Odpowiednie zdarzenia są wywoływane przed i po utworzeniu lub aktualizacji rekordu. Jest to wywoływane podczas wywołania repository.create() lub repository.update().
Sygnatura
Typ
Przykład
'beforeDestroy' / 'afterDestroy'Odpowiednie zdarzenia są wywoływane przed i po usunięciu rekordu. Jest to wywoływane podczas wywołania repository.destroy().
Sygnatura
Typ
Przykład
'afterCreateWithAssociations'To zdarzenie jest wywoływane po utworzeniu rekordu z hierarchicznymi danymi powiązań. Jest to wywoływane podczas wywołania repository.create().
Sygnatura
Typ
Przykład
'afterUpdateWithAssociations'To zdarzenie jest wywoływane po aktualizacji rekordu z hierarchicznymi danymi powiązań. Jest to wywoływane podczas wywołania repository.update().
Sygnatura
Typ
Przykład
'afterSaveWithAssociations'To zdarzenie jest wywoływane po utworzeniu lub aktualizacji rekordu z hierarchicznymi danymi powiązań. Jest to wywoływane podczas wywołania repository.create() lub repository.update().
Sygnatura
Typ
Przykład
'beforeDefineCollection'Wywoływane przed zdefiniowaniem kolekcji, np. podczas wywołania db.collection().
Uwaga: To zdarzenie jest synchroniczne.
Sygnatura
Typ
Przykład
'afterDefineCollection'Wywoływane po zdefiniowaniu kolekcji, np. podczas wywołania db.collection().
Uwaga: To zdarzenie jest synchroniczne.
Sygnatura
Typ
Przykład
'beforeRemoveCollection' / 'afterRemoveCollection'Wywoływane przed i po usunięciu kolekcji z pamięci, np. podczas wywołania db.removeCollection().
Uwaga: To zdarzenie jest synchroniczne.
Sygnatura
Typ
Przykład