Database
Ikhtisar
Database adalah tools interaksi database yang disediakan NocoBase, menyediakan fungsi interaksi database yang sangat memudahkan untuk aplikasi no-code, low-code. Database yang didukung saat ini:
- SQLite 3.8.8+
- MySQL 8.0.17+
- PostgreSQL 10.0+
Menghubungkan Database
Pada constructor Database, dapat dikonfigurasi koneksi database melalui parameter options.
Untuk parameter konfigurasi detail lihat Constructor.
Definisi Model Data
Database mendefinisikan struktur database melalui Collection, satu objek Collection mewakili satu tabel di database.
Setelah definisi struktur database selesai, dapat menggunakan method sync() untuk sinkronisasi struktur database.
Untuk method penggunaan Collection yang lebih detail lihat Collection.
Baca dan Tulis Data
Database mengoperasikan data melalui Repository.
Untuk method penggunaan CRUD data yang lebih detail lihat Repository.
Constructor
Signature
constructor(options: DatabaseOptions)
Membuat instance database.
Parameter
Method Terkait Migration
addMigration()
Menambahkan satu file migration.
Signature
addMigration(options: MigrationItem)
Parameter
Contoh
addMigrations()
Menambahkan file migration di direktori yang ditentukan.
Signature
addMigrations(options: AddMigrationsOptions): void
Parameter
Contoh
Tools Method
inDialect()
Memeriksa apakah tipe database saat ini adalah tipe yang ditentukan.
Signature
inDialect(dialect: string[]): boolean
Parameter
getTablePrefix()
Mendapatkan prefix nama tabel di konfigurasi.
Signature
getTablePrefix(): string
Konfigurasi Tabel Data
collection()
Mendefinisikan satu tabel data. Pemanggilan ini mirip dengan method define Sequelize, hanya membuat struktur tabel di memori, jika perlu persistensi ke database, perlu memanggil method sync.
Signature
collection(options: CollectionOptions): Collection
Parameter
Semua parameter konfigurasi options sama dengan constructor class Collection, lihat Collection.
Event
'beforeDefineCollection': Dipicu sebelum mendefinisikan tabel.'afterDefineCollection': Dipicu setelah mendefinisikan tabel.
Contoh
getCollection()
Mendapatkan tabel data yang sudah didefinisikan.
Signature
getCollection(name: string): Collection
Parameter
Contoh
hasCollection()
Memeriksa apakah tabel data yang ditentukan sudah didefinisikan.
Signature
hasCollection(name: string): boolean
Parameter
Contoh
removeCollection()
Menghapus tabel data yang sudah didefinisikan. Hanya menghapus dari memori, jika perlu persistensi, perlu memanggil method sync.
Signature
removeCollection(name: string): void
Parameter
Event
'beforeRemoveCollection': Dipicu sebelum menghapus tabel.'afterRemoveCollection': Dipicu setelah menghapus tabel.
Contoh
import()
Mengimpor semua file di direktori file sebagai konfigurasi collection yang dimuat ke memori.
Signature
async import(options: { directory: string; extensions?: ImportFileExtension[] }): Promise<Map<string, Collection>>
Parameter
Contoh
Collection yang didefinisikan di file ./collections/books.ts:
Mengimpor konfigurasi terkait saat plugin di-load:
Registrasi dan Pengambilan Ekstensi
registerFieldTypes()
Mendaftarkan tipe field kustom.
Signature
registerFieldTypes(fieldTypes: MapOf<typeof Field>): void
Parameter
fieldTypes adalah pasangan key-value, key adalah nama tipe field, value adalah class tipe field.
Contoh
registerModels()
Mendaftarkan class model data kustom.
Signature
registerModels(models: MapOf<ModelStatic<any>>): void
Parameter
models adalah pasangan key-value, key adalah nama model data, value adalah class model data.
Contoh
registerRepositories()
Mendaftarkan class data repository kustom.
Signature
registerRepositories(repositories: MapOf<RepositoryType>): void
Parameter
repositories adalah pasangan key-value, key adalah nama data repository, value adalah class data repository.
Contoh
registerOperators()
Mendaftarkan operator query data kustom.
Signature
registerOperators(operators: MapOf<OperatorFunc>)
Parameter
operators adalah pasangan key-value, key adalah nama operator, value adalah fungsi yang menghasilkan statement perbandingan operator.
Contoh
getModel()
Mendapatkan class model data yang sudah didefinisikan. Jika sebelumnya tidak mendaftarkan class model kustom, akan mengembalikan class model default Sequelize. Nama default sama dengan nama yang didefinisikan di collection.
Signature
getModel(name: string): Model
Parameter
Contoh
Catatan: Class model yang didapatkan dari collection tidak persis sama dengan class model saat didaftarkan, melainkan inherits dari class model saat didaftarkan. Karena class model Sequelize akan dimodifikasi propertinya selama proses inisialisasi, NocoBase secara otomatis menangani relasi inheritance ini. Selain class tidak sama, semua definisi lainnya dapat digunakan secara normal.
getRepository()
Mendapatkan class data repository kustom. Jika sebelumnya tidak mendaftarkan class data repository kustom, akan mengembalikan class data repository default NocoBase. Nama default sama dengan nama yang didefinisikan di collection.
Class data repository terutama digunakan untuk operasi CRUD berbasis model data, lihat Data Repository.
Signature
getRepository(name: string): RepositorygetRepository(name: string, relationId?: string | number): Repository
Parameter
Saat nama berbentuk seperti 'tables.relactions' dengan asosiasi, akan mengembalikan class data repository asosiasi. Jika menyediakan parameter kedua, data repository saat digunakan (query, modifikasi, dll) akan berbasis nilai foreign key data relasi.
Contoh
Misalkan ada dua tabel data artikel dan author, dan tabel artikel memiliki foreign key yang menunjuk ke tabel author:
Event Database
on()
Mendengarkan event database.
Signature
on(event: string, listener: (...args: any[]) => void | Promise<void>): void
Parameter
Nama event secara default mendukung event Model dari Sequelize. Untuk event global, mendengarkan dengan format nama <sequelize_model_global_event>, untuk event satu Model, mendengarkan dengan format nama <model_name>.<sequelize_model_event>.
Untuk penjelasan parameter dan contoh detail dari semua tipe event bawaan, lihat bagian Event Bawaan.
off()
Menghapus fungsi event listener.
Signature
off(name: string, listener: Function)
Parameter
Contoh
Operasi Database
auth()
Verifikasi koneksi database. Dapat digunakan untuk memastikan aplikasi sudah membangun koneksi dengan data.
Signature
auth(options: QueryOptions & { retry?: number } = {}): Promise<boolean>
Parameter
Contoh
reconnect()
Menghubungkan ulang database.
Contoh
closed()
Memeriksa apakah koneksi database sudah ditutup.
Signature
closed(): boolean
close()
Menutup koneksi database. Setara dengan sequelize.close().
sync()
Sinkronisasi struktur tabel database. Setara dengan sequelize.sync(), untuk parameter lihat dokumentasi Sequelize.
clean()
Mengosongkan database, akan menghapus semua tabel data.
Signature
clean(options: CleanOptions): Promise<void>
Parameter
Contoh
Menghapus semua tabel kecuali tabel users.
Export Level Paket
defineCollection()
Membuat konten konfigurasi tabel data.
Signature
defineCollection(name: string, config: CollectionOptions): CollectionOptions
Parameter
Contoh
Untuk file konfigurasi tabel data yang akan diimpor oleh db.import():
extendCollection()
Memperluas konten konfigurasi struktur tabel yang sudah ada di memori, terutama digunakan untuk konten file yang diimpor oleh method import(). Method ini adalah method top-level yang diekspor oleh paket @nocobase/database, tidak dipanggil melalui instance db. Juga dapat menggunakan alias extend.
Signature
extendCollection(collectionOptions: CollectionOptions, mergeOptions?: MergeOptions): ExtendedCollectionOptions
Parameter
Contoh
Definisi tabel books asli (books.ts):
Memperluas definisi tabel books (books.extend.ts):
Kedua file di atas jika diimpor saat memanggil import(), setelah diperluas lagi melalui extend(), tabel books akan memiliki dua field title dan price.
Method ini sangat berguna saat memperluas struktur tabel yang sudah didefinisikan oleh plugin yang ada.
Event Bawaan
Database akan memicu event yang sesuai pada siklus hidup yang sesuai, setelah subscribe melalui method on() dan melakukan pemrosesan tertentu dapat memenuhi beberapa kebutuhan bisnis.
'beforeSync' / 'afterSync'
Dipicu sebelum dan setelah konfigurasi struktur tabel baru (field, index, dll) disinkronkan ke database, biasanya saat mengeksekusi collection.sync() (panggilan internal) akan dipicu, umumnya digunakan untuk pemrosesan logika ekstensi field tertentu.
Signature
Tipe
Contoh
'beforeValidate' / 'afterValidate'
Sebelum membuat atau mengupdate data ada proses validasi data berdasarkan aturan yang didefinisikan collection, sebelum dan setelah validasi akan memicu event yang sesuai. Saat memanggil repository.create() atau repository.update() akan dipicu.
Signature
Tipe
Contoh
'beforeCreate' / 'afterCreate'
Sebelum dan setelah membuat satu data akan memicu event yang sesuai, saat memanggil repository.create() akan dipicu.
Signature
Tipe
Contoh
'beforeUpdate' / 'afterUpdate'
Sebelum dan setelah mengupdate satu data akan memicu event yang sesuai, saat memanggil repository.update() akan dipicu.
Signature
Tipe
Contoh
'beforeSave' / 'afterSave'
Sebelum dan setelah membuat atau mengupdate satu data akan memicu event yang sesuai, saat memanggil repository.create() atau repository.update() akan dipicu.
Signature
Tipe
Contoh
'beforeDestroy' / 'afterDestroy'
Sebelum dan setelah menghapus satu data akan memicu event yang sesuai, saat memanggil repository.destroy() akan dipicu.
Signature
Tipe
Contoh
'afterCreateWithAssociations'
Setelah membuat satu data dengan data hierarki relasi akan memicu event yang sesuai, saat memanggil repository.create() akan dipicu.
Signature
Tipe
Contoh
'afterUpdateWithAssociations'
Setelah mengupdate satu data dengan data hierarki relasi akan memicu event yang sesuai, saat memanggil repository.update() akan dipicu.
Signature
Tipe
Contoh
'afterSaveWithAssociations'
Setelah membuat atau mengupdate satu data dengan data hierarki relasi akan memicu event yang sesuai, saat memanggil repository.create() atau repository.update() akan dipicu.
Signature
Tipe
Contoh
'beforeDefineCollection'
Dipicu sebelum mendefinisikan satu tabel data, seperti saat memanggil db.collection().
Catatan: Event ini adalah event sinkron.
Signature
Tipe
Contoh
'afterDefineCollection'
Dipicu setelah mendefinisikan satu tabel data, seperti saat memanggil db.collection().
Catatan: Event ini adalah event sinkron.
Signature
Tipe
Contoh
'beforeRemoveCollection' / 'afterRemoveCollection'
Dipicu sebelum dan setelah menghapus satu tabel data dari memori, seperti saat memanggil db.removeCollection().
Catatan: Event ini adalah event sinkron.
Signature
Tipe
Contoh

