Dokumen ini diterjemahkan oleh AI. Untuk ketidakakuratan apa pun, silakan lihat versi bahasa Inggris
Database adalah alat interaksi basis data yang disediakan oleh NocoBase, menawarkan kemampuan interaksi basis data yang sangat nyaman untuk aplikasi tanpa kode (no-code) dan kode rendah (low-code). Basis data yang saat ini didukung adalah:
Dalam konstruktor Database, Anda dapat mengonfigurasi koneksi basis data dengan meneruskan parameter options.
Untuk parameter konfigurasi yang lebih detail, silakan merujuk ke Konstruktor.
Database mendefinisikan struktur basis data melalui koleksi. Sebuah objek koleksi merepresentasikan sebuah tabel dalam basis data.
Setelah definisi struktur basis data selesai, Anda dapat menggunakan metode sync() untuk menyinkronkan struktur basis data.
Untuk penggunaan koleksi yang lebih detail, silakan merujuk ke koleksi.
Database mengoperasikan data melalui Repository.
Untuk penggunaan CRUD data yang lebih detail, silakan merujuk ke Repository.
Tanda Tangan
constructor(options: DatabaseOptions)Membuat sebuah instans basis data.
Parameter
| Nama Parameter | Tipe | Nilai Default | Deskripsi |
|---|---|---|---|
options.host | string | 'localhost' | Host basis data |
options.port | number | - | Port layanan basis data, dengan port default yang sesuai dengan basis data yang digunakan |
options.username | string | - | Nama pengguna basis data |
options.password | string | - | Kata sandi basis data |
options.database | string | - | Nama basis data |
options.dialect | string | 'mysql' | Tipe basis data |
options.storage? | string | ':memory:' | Mode penyimpanan untuk SQLite |
options.logging? | boolean | false | Apakah mengaktifkan pencatatan log |
options.define? | Object | {} | Parameter definisi tabel default |
options.tablePrefix? | string | '' | Ekstensi NocoBase, awalan nama tabel |
options.migrator? | UmzugOptions | {} | Ekstensi NocoBase, parameter terkait manajer migrasi, merujuk pada implementasi Umzug |
addMigration()Menambahkan satu berkas migrasi.
Tanda Tangan
addMigration(options: MigrationItem)Parameter
| Nama Parameter | Tipe | Nilai Default | Deskripsi |
|---|---|---|---|
options.name | string | - | Nama berkas migrasi |
options.context? | string | - | Konteks berkas migrasi |
options.migration? | typeof Migration | - | Kelas kustom untuk berkas migrasi |
options.up | Function | - | Metode up dari berkas migrasi |
options.down | Function | - | Metode down dari berkas migrasi |
Contoh
addMigrations()Menambahkan berkas migrasi dari direktori yang ditentukan.
Tanda Tangan
addMigrations(options: AddMigrationsOptions): voidParameter
| Nama Parameter | Tipe | Nilai Default | Deskripsi |
|---|---|---|---|
options.directory | string | '' | Direktori tempat berkas migrasi berada |
options.extensions | string[] | ['js', 'ts'] | Ekstensi berkas |
options.namespace? | string | '' | Namespace |
options.context? | Object | { db } | Konteks berkas migrasi |
Contoh
inDialect()Memeriksa apakah tipe basis data saat ini adalah salah satu dari tipe yang ditentukan.
Tanda Tangan
inDialect(dialect: string[]): booleanParameter
| Nama Parameter | Tipe | Nilai Default | Deskripsi |
|---|---|---|---|
dialect | string[] | - | Tipe basis data, nilai yang mungkin adalah mysql/postgres/mariadb |
getTablePrefix()Mendapatkan awalan nama tabel dari konfigurasi.
Tanda Tangan
getTablePrefix(): stringcollection()Mendefinisikan sebuah koleksi. Panggilan ini mirip dengan metode define Sequelize, yang hanya membuat struktur tabel di memori. Untuk menyimpannya secara permanen ke basis data, Anda perlu memanggil metode sync.
Tanda Tangan
collection(options: CollectionOptions): CollectionParameter
Semua parameter konfigurasi options konsisten dengan konstruktor kelas koleksi, silakan merujuk ke koleksi.
Peristiwa
'beforeDefineCollection': Dipicu sebelum mendefinisikan koleksi.'afterDefineCollection': Dipicu setelah mendefinisikan koleksi.Contoh
getCollection()Mendapatkan koleksi yang telah didefinisikan.
Tanda Tangan
getCollection(name: string): CollectionParameter
| Nama Parameter | Tipe | Nilai Default | Deskripsi |
|---|---|---|---|
name | string | - | Nama koleksi |
Contoh
hasCollection()Memeriksa apakah koleksi yang ditentukan telah didefinisikan.
Tanda Tangan
hasCollection(name: string): booleanParameter
| Nama Parameter | Tipe | Nilai Default | Deskripsi |
|---|---|---|---|
name | string | - | Nama koleksi |
Contoh
removeCollection()Menghapus koleksi yang telah didefinisikan. Ini hanya dihapus dari memori; untuk menyimpan perubahan secara permanen, Anda perlu memanggil metode sync.
Tanda Tangan
removeCollection(name: string): voidParameter
| Nama Parameter | Tipe | Nilai Default | Deskripsi |
|---|---|---|---|
name | string | - | Nama koleksi |
Peristiwa
'beforeRemoveCollection': Dipicu sebelum menghapus koleksi.'afterRemoveCollection': Dipicu setelah menghapus koleksi.Contoh
import()Mengimpor semua berkas dalam sebuah direktori sebagai konfigurasi koleksi ke dalam memori.
Tanda Tangan
async import(options: { directory: string; extensions?: ImportFileExtension[] }): Promise<Map<string, Collection>>Parameter
| Nama Parameter | Tipe | Nilai Default | Deskripsi |
|---|---|---|---|
options.directory | string | - | Jalur direktori yang akan diimpor |
options.extensions | string[] | ['ts', 'js'] | Memindai akhiran tertentu |
Contoh
koleksi yang didefinisikan dalam berkas ./collections/books.ts adalah sebagai berikut:
Impor konfigurasi yang relevan saat plugin dimuat:
registerFieldTypes()Mendaftarkan tipe bidang kustom.
Tanda Tangan
registerFieldTypes(fieldTypes: MapOf<typeof Field>): voidParameter
fieldTypes adalah pasangan kunci-nilai di mana kuncinya adalah nama tipe bidang dan nilainya adalah kelas tipe bidang.
Contoh
registerModels()Mendaftarkan kelas model data kustom.
Tanda Tangan
registerModels(models: MapOf<ModelStatic<any>>): voidParameter
models adalah pasangan kunci-nilai di mana kuncinya adalah nama model data dan nilainya adalah kelas model data.
Contoh
registerRepositories()Mendaftarkan kelas repositori data kustom.
Tanda Tangan
registerRepositories(repositories: MapOf<RepositoryType>): voidParameter
repositories adalah pasangan kunci-nilai di mana kuncinya adalah nama repositori data dan nilainya adalah kelas repositori data.
Contoh
registerOperators()Mendaftarkan operator kueri data kustom.
Tanda Tangan
registerOperators(operators: MapOf<OperatorFunc>)Parameter
operators adalah pasangan kunci-nilai di mana kuncinya adalah nama operator dan nilainya adalah fungsi yang menghasilkan pernyataan perbandingan.
Contoh
getModel()Mendapatkan kelas model data yang telah didefinisikan. Jika tidak ada kelas model kustom yang terdaftar sebelumnya, ini akan mengembalikan kelas model default Sequelize. Nama defaultnya sama dengan nama koleksi yang didefinisikan.
Tanda Tangan
getModel(name: string): ModelParameter
| Nama Parameter | Tipe | Nilai Default | Deskripsi |
|---|---|---|---|
name | string | - | Nama model yang terdaftar |
Contoh
Catatan: Kelas model yang diperoleh dari koleksi tidak sama persis dengan kelas model yang terdaftar, melainkan mewarisi dari kelas model yang terdaftar. Karena properti kelas model Sequelize dimodifikasi selama proses inisialisasi, NocoBase secara otomatis menangani hubungan pewarisan ini. Kecuali untuk ketidaksamaan kelas, semua definisi lainnya dapat digunakan secara normal.
getRepository()Mendapatkan kelas repositori data kustom. Jika tidak ada kelas repositori data kustom yang terdaftar sebelumnya, ini akan mengembalikan kelas repositori data default NocoBase. Nama defaultnya sama dengan nama koleksi yang didefinisikan.
Kelas repositori data terutama digunakan untuk operasi CRUD (Buat, Baca, Perbarui, Hapus) berdasarkan model data, silakan merujuk ke Repository.
Tanda Tangan
getRepository(name: string): RepositorygetRepository(name: string, relationId?: string | number): RepositoryParameter
| Nama Parameter | Tipe | Nilai Default | Deskripsi |
|---|---|---|---|
name | string | - | Nama repositori data yang terdaftar |
relationId | string | number | - | Nilai kunci asing untuk data relasional |
Ketika nama adalah nama asosiasi seperti 'tables.relations', ini akan mengembalikan kelas repositori data terkait. Jika parameter kedua disediakan, repositori akan didasarkan pada nilai kunci asing dari data relasional saat digunakan (kueri, pembaruan, dll.).
Contoh
Misalkan ada dua koleksi, artikel dan penulis, dan koleksi artikel memiliki kunci asing yang menunjuk ke koleksi penulis:
on()Mendengarkan peristiwa basis data.
Tanda Tangan
on(event: string, listener: (...args: any[]) => void | Promise<void>): voidParameter
| Nama Parameter | Tipe | Nilai Default | Deskripsi |
|---|---|---|---|
| event | string | - | Nama peristiwa |
| listener | Function | - | Pendengar peristiwa |
Nama peristiwa secara default mendukung peristiwa Model Sequelize. Untuk peristiwa global, dengarkan menggunakan format <sequelize_model_global_event>, dan untuk peristiwa Model tunggal, gunakan format <nama_model>.<sequelize_model_event>.
Untuk deskripsi parameter dan contoh detail dari semua tipe peristiwa bawaan, silakan merujuk ke bagian Peristiwa Bawaan.
off()Menghapus fungsi pendengar peristiwa.
Tanda Tangan
off(name: string, listener: Function)Parameter
| Nama Parameter | Tipe | Nilai Default | Deskripsi |
|---|---|---|---|
| name | string | - | Nama peristiwa |
| listener | Function | - | Pendengar peristiwa |
Contoh
auth()Autentikasi koneksi basis data. Dapat digunakan untuk memastikan bahwa aplikasi telah membangun koneksi dengan data.
Tanda Tangan
auth(options: QueryOptions & { retry?: number } = {}): Promise<boolean>Parameter
| Nama Parameter | Tipe | Nilai Default | Deskripsi |
|---|---|---|---|
options? | Object | - | Opsi autentikasi |
options.retry? | number | 10 | Jumlah percobaan ulang saat autentikasi gagal |
options.transaction? | Transaction | - | Objek transaksi |
options.logging? | boolean | Function | false | Apakah mencetak log |
Contoh
reconnect()Menghubungkan kembali ke basis data.
Contoh
closed()Memeriksa apakah koneksi basis data telah ditutup.
Tanda Tangan
closed(): booleanclose()Menutup koneksi basis data. Setara dengan sequelize.close().
sync()Menyinkronkan struktur koleksi basis data. Setara dengan sequelize.sync(), untuk parameter silakan merujuk ke dokumentasi Sequelize.
clean()Membersihkan basis data, akan menghapus semua koleksi.
Tanda Tangan
clean(options: CleanOptions): Promise<void>Parameter
| Nama Parameter | Tipe | Nilai Default | Deskripsi |
|---|---|---|---|
options.drop | boolean | false | Apakah menghapus semua koleksi |
options.skip | string[] | - | Konfigurasi nama koleksi yang akan dilewati |
options.transaction | Transaction | - | Objek transaksi |
Contoh
Menghapus semua koleksi kecuali koleksi users.
defineCollection()Membuat konten konfigurasi untuk sebuah koleksi.
Tanda Tangan
defineCollection(name: string, config: CollectionOptions): CollectionOptionsParameter
| Nama Parameter | Tipe | Nilai Default | Deskripsi |
|---|---|---|---|
collectionOptions | CollectionOptions | - | Sama dengan semua parameter db.collection() |
Contoh
Untuk berkas konfigurasi koleksi yang akan diimpor oleh db.import():
extendCollection()Memperluas konten konfigurasi struktur koleksi yang sudah ada di memori, terutama digunakan untuk konten berkas yang diimpor oleh metode import(). Metode ini adalah metode tingkat atas yang diekspor oleh paket @nocobase/database dan tidak dipanggil melalui instans db. Alias extend juga dapat digunakan.
Tanda Tangan
extendCollection(collectionOptions: CollectionOptions, mergeOptions?: MergeOptions): ExtendedCollectionOptionsParameter
| Nama Parameter | Tipe | Nilai Default | Deskripsi |
|---|---|---|---|
collectionOptions | CollectionOptions | - | Sama dengan semua parameter db.collection() |
mergeOptions? | MergeOptions | - | Parameter untuk paket npm deepmerge |
Contoh
Definisi koleksi buku asli (books.ts):
Definisi koleksi buku yang diperluas (books.extend.ts):
Jika kedua berkas di atas diimpor saat memanggil import(), setelah diperluas lagi dengan extend(), koleksi buku akan memiliki dua bidang yaitu title dan price.
Metode ini sangat berguna untuk memperluas struktur koleksi yang sudah didefinisikan oleh plugin yang ada.
Basis data akan memicu peristiwa-peristiwa berikut pada siklus hidup yang sesuai. Dengan berlangganan melalui metode on(), penanganan khusus dapat dilakukan untuk memenuhi beberapa kebutuhan bisnis.
'beforeSync' / 'afterSync'Dipicu sebelum dan sesudah konfigurasi struktur koleksi baru (bidang, indeks, dll.) disinkronkan ke basis data. Ini biasanya dipicu saat collection.sync() (panggilan internal) dieksekusi dan umumnya digunakan untuk menangani logika ekstensi bidang khusus.
Tanda Tangan
Tipe
Contoh
'beforeValidate' / 'afterValidate'Sebelum membuat atau memperbarui data, ada proses validasi data berdasarkan aturan yang didefinisikan dalam koleksi. Peristiwa yang sesuai akan dipicu sebelum dan sesudah validasi. Ini dipicu saat repository.create() atau repository.update() dipanggil.
Tanda Tangan
Tipe
Contoh
'beforeCreate' / 'afterCreate'Peristiwa yang sesuai akan dipicu sebelum dan sesudah membuat satu data. Ini dipicu saat repository.create() dipanggil.
Tanda Tangan
Tipe
Contoh
'beforeUpdate' / 'afterUpdate'Peristiwa yang sesuai akan dipicu sebelum dan sesudah memperbarui satu data. Ini dipicu saat repository.update() dipanggil.
Tanda Tangan
Tipe
Contoh
'beforeSave' / 'afterSave'Peristiwa yang sesuai akan dipicu sebelum dan sesudah membuat atau memperbarui satu data. Ini dipicu saat repository.create() atau repository.update() dipanggil.
Tanda Tangan
Tipe
Contoh
'beforeDestroy' / 'afterDestroy'Peristiwa yang sesuai akan dipicu sebelum dan sesudah menghapus satu data. Ini dipicu saat repository.destroy() dipanggil.
Tanda Tangan
Tipe
Contoh
'afterCreateWithAssociations'Peristiwa ini dipicu setelah membuat satu data yang membawa data relasi hierarkis. Ini dipicu saat repository.create() dipanggil.
Tanda Tangan
Tipe
Contoh
'afterUpdateWithAssociations'Peristiwa ini dipicu setelah memperbarui satu data yang membawa data relasi hierarkis. Ini dipicu saat repository.update() dipanggil.
Tanda Tangan
Tipe
Contoh
'afterSaveWithAssociations'Peristiwa ini dipicu setelah membuat atau memperbarui satu data yang membawa data relasi hierarkis. Ini dipicu saat repository.create() atau repository.update() dipanggil.
Tanda Tangan
Tipe
Contoh
'beforeDefineCollection'Dipicu sebelum sebuah koleksi didefinisikan, misalnya saat db.collection() dipanggil.
Catatan: Peristiwa ini adalah peristiwa sinkron.
Tanda Tangan
Tipe
Contoh
'afterDefineCollection'Dipicu setelah sebuah koleksi didefinisikan, misalnya saat db.collection() dipanggil.
Catatan: Peristiwa ini adalah peristiwa sinkron.
Tanda Tangan
Tipe
Contoh
'beforeRemoveCollection' / 'afterRemoveCollection'Dipicu sebelum dan sesudah sebuah koleksi dihapus dari memori, misalnya saat db.removeCollection() dipanggil.
Catatan: Peristiwa ini adalah peristiwa sinkron.
Tanda Tangan
Tipe
Contoh