Tài liệu này được dịch bởi AI. Đối với bất kỳ thông tin không chính xác nào, vui lòng tham khảo phiên bản tiếng Anh
Database là công cụ tương tác cơ sở dữ liệu do NocoBase cung cấp, mang đến khả năng tương tác cơ sở dữ liệu rất tiện lợi cho các ứng dụng không mã (no-code) và ít mã (low-code). Các cơ sở dữ liệu hiện được hỗ trợ bao gồm:
Trong hàm tạo (constructor) của Database, bạn có thể cấu hình kết nối cơ sở dữ liệu bằng cách truyền tham số options.
Để biết chi tiết các tham số cấu hình, vui lòng tham khảo Hàm tạo.
Database định nghĩa cấu trúc cơ sở dữ liệu thông qua bộ sưu tập. Một đối tượng bộ sưu tập đại diện cho một bảng trong cơ sở dữ liệu.
Sau khi định nghĩa cấu trúc cơ sở dữ liệu hoàn tất, bạn có thể sử dụng phương thức sync() để đồng bộ hóa cấu trúc cơ sở dữ liệu.
Để biết thêm chi tiết về cách sử dụng bộ sưu tập, vui lòng tham khảo Bộ sưu tập.
Database thực hiện các thao tác trên dữ liệu thông qua Repository.
Để biết thêm chi tiết về cách sử dụng CRUD dữ liệu, vui lòng tham khảo Repository.
Chữ ký
constructor(options: DatabaseOptions)Tạo một phiên bản cơ sở dữ liệu.
Tham số
| Tham số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
options.host | string | 'localhost' | Máy chủ cơ sở dữ liệu |
options.port | number | - | Cổng dịch vụ cơ sở dữ liệu, có cổng mặc định tương ứng với cơ sở dữ liệu được sử dụng |
options.username | string | - | Tên người dùng cơ sở dữ liệu |
options.password | string | - | Mật khẩu cơ sở dữ liệu |
options.database | string | - | Tên cơ sở dữ liệu |
options.dialect | string | 'mysql' | Loại cơ sở dữ liệu |
options.storage? | string | ':memory:' | Chế độ lưu trữ cho SQLite |
options.logging? | boolean | false | Có bật ghi nhật ký không |
options.define? | Object | {} | Các tham số định nghĩa bảng mặc định |
options.tablePrefix? | string | '' | Phần mở rộng của NocoBase, tiền tố tên bảng |
options.migrator? | UmzugOptions | {} | Phần mở rộng của NocoBase, các tham số liên quan đến trình quản lý di chuyển (migration manager), tham khảo triển khai Umzug |
addMigration()Thêm một tệp di chuyển (migration file) duy nhất.
Chữ ký
addMigration(options: MigrationItem)Tham số
| Tham số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
options.name | string | - | Tên tệp di chuyển |
options.context? | string | - | Ngữ cảnh của tệp di chuyển |
options.migration? | typeof Migration | - | Lớp tùy chỉnh cho tệp di chuyển |
options.up | Function | - | Phương thức up của tệp di chuyển |
options.down | Function | - | Phương thức down của tệp di chuyển |
Ví dụ
addMigrations()Thêm các tệp di chuyển từ một thư mục được chỉ định.
Chữ ký
addMigrations(options: AddMigrationsOptions): voidTham số
| Tham số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
options.directory | string | '' | Thư mục chứa các tệp di chuyển |
options.extensions | string[] | ['js', 'ts'] | Phần mở rộng tệp |
options.namespace? | string | '' | Không gian tên (Namespace) |
options.context? | Object | { db } | Ngữ cảnh của tệp di chuyển |
Ví dụ
inDialect()Kiểm tra xem loại cơ sở dữ liệu hiện tại có phải là một trong các loại được chỉ định hay không.
Chữ ký
inDialect(dialect: string[]): booleanTham số
| Tham số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
dialect | string[] | - | Loại cơ sở dữ liệu, các giá trị có thể là mysql/postgres/mariadb |
getTablePrefix()Lấy tiền tố tên bảng từ cấu hình.
Chữ ký
getTablePrefix(): stringcollection()Định nghĩa một bảng dữ liệu. Lời gọi này tương tự phương thức define của Sequelize, chỉ tạo cấu trúc bảng trong bộ nhớ. Để lưu trữ vĩnh viễn vào cơ sở dữ liệu, bạn cần gọi phương thức sync.
Chữ ký
collection(options: CollectionOptions): CollectionTham số
Tất cả các tham số cấu hình options đều nhất quán với hàm tạo của lớp bộ sưu tập, tham khảo Bộ sưu tập.
Sự kiện
'beforeDefineCollection': Kích hoạt trước khi định nghĩa một bảng.'afterDefineCollection': Kích hoạt sau khi định nghĩa một bảng.Ví dụ
getCollection()Lấy bảng dữ liệu đã được định nghĩa.
Chữ ký
getCollection(name: string): CollectionTham số
| Tham số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
name | string | - | Tên bảng |
Ví dụ
hasCollection()Kiểm tra xem bảng dữ liệu được chỉ định đã được định nghĩa hay chưa.
Chữ ký
hasCollection(name: string): booleanTham số
| Tham số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
name | string | - | Tên bảng |
Ví dụ
removeCollection()Xóa bảng dữ liệu đã được định nghĩa. Việc xóa chỉ diễn ra trong bộ nhớ; để lưu trữ vĩnh viễn thay đổi, bạn cần gọi phương thức sync.
Chữ ký
removeCollection(name: string): voidTham số
| Tham số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
name | string | - | Tên bảng |
Sự kiện
'beforeRemoveCollection': Kích hoạt trước khi xóa một bảng.'afterRemoveCollection': Kích hoạt sau khi xóa một bảng.Ví dụ
import()Nhập tất cả các tệp trong một thư mục làm cấu hình bộ sưu tập vào bộ nhớ.
Chữ ký
async import(options: { directory: string; extensions?: ImportFileExtension[] }): Promise<Map<string, Collection>>Tham số
| Tham số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
options.directory | string | - | Đường dẫn thư mục cần nhập |
options.extensions | string[] | ['ts', 'js'] | Quét các hậu tố cụ thể |
Ví dụ
bộ sưu tập được định nghĩa trong tệp ./collections/books.ts như sau:
Nhập cấu hình liên quan khi plugin tải:
registerFieldTypes()Đăng ký các loại trường tùy chỉnh.
Chữ ký
registerFieldTypes(fieldTypes: MapOf<typeof Field>): voidTham số
fieldTypes là một cặp khóa-giá trị, trong đó khóa là tên loại trường và giá trị là lớp loại trường.
Ví dụ
registerModels()Đăng ký các lớp mô hình dữ liệu tùy chỉnh.
Chữ ký
registerModels(models: MapOf<ModelStatic<any>>): voidTham số
models là một cặp khóa-giá trị, trong đó khóa là tên mô hình dữ liệu và giá trị là lớp mô hình dữ liệu.
Ví dụ
registerRepositories()Đăng ký các lớp kho dữ liệu (repository) tùy chỉnh.
Chữ ký
registerRepositories(repositories: MapOf<RepositoryType>): voidTham số
repositories là một cặp khóa-giá trị, trong đó khóa là tên kho dữ liệu và giá trị là lớp kho dữ liệu.
Ví dụ
registerOperators()Đăng ký các toán tử truy vấn dữ liệu tùy chỉnh.
Chữ ký
registerOperators(operators: MapOf<OperatorFunc>)Tham số
operators là một cặp khóa-giá trị, trong đó khóa là tên toán tử và giá trị là hàm tạo câu lệnh so sánh của toán tử.
Ví dụ
getModel()Lấy lớp mô hình dữ liệu đã được định nghĩa. Nếu không có lớp mô hình tùy chỉnh nào được đăng ký trước đó, nó sẽ trả về lớp mô hình mặc định của Sequelize. Tên mặc định giống với tên của bộ sưu tập được định nghĩa.
Chữ ký
getModel(name: string): ModelTham số
| Tham số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
name | string | - | Tên mô hình đã đăng ký |
Ví dụ
Lưu ý: Lớp mô hình được lấy từ bộ sưu tập không hoàn toàn giống với lớp mô hình đã đăng ký, mà kế thừa từ lớp mô hình đã đăng ký. Do các thuộc tính của lớp mô hình Sequelize sẽ được sửa đổi trong quá trình khởi tạo, NocoBase tự động xử lý mối quan hệ kế thừa này. Ngoại trừ việc các lớp không hoàn toàn giống nhau, tất cả các định nghĩa khác đều có thể được sử dụng bình thường.
getRepository()Lấy lớp kho dữ liệu tùy chỉnh. Nếu không có lớp kho dữ liệu tùy chỉnh nào được đăng ký trước đó, nó sẽ trả về lớp kho dữ liệu mặc định của NocoBase. Tên mặc định giống với tên của bộ sưu tập được định nghĩa.
Các lớp kho dữ liệu chủ yếu được sử dụng cho các thao tác CRUD (Tạo, Đọc, Cập nhật, Xóa) dựa trên mô hình dữ liệu, tham khảo Repository.
Chữ ký
getRepository(name: string): RepositorygetRepository(name: string, relationId?: string | number): RepositoryTham số
| Tham số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
name | string | - | Tên kho dữ liệu đã đăng ký |
relationId | string | number | - | Giá trị khóa ngoại cho dữ liệu quan hệ |
Khi tên là một tên liên kết có dạng như 'tables.relations', nó sẽ trả về lớp kho dữ liệu liên kết. Nếu tham số thứ hai được cung cấp, kho dữ liệu khi sử dụng (truy vấn, cập nhật, v.v.) sẽ dựa trên giá trị khóa ngoại của dữ liệu quan hệ.
Ví dụ
Giả sử có hai bảng dữ liệu là bài viết và tác giả, và bảng bài viết có một khóa ngoại trỏ đến bảng tác giả:
on()Lắng nghe các sự kiện cơ sở dữ liệu.
Chữ ký
on(event: string, listener: (...args: any[]) => void | Promise<void>): voidTham số
| Tham số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
| event | string | - | Tên sự kiện |
| listener | Function | - | Trình lắng nghe sự kiện |
Tên sự kiện mặc định hỗ trợ các sự kiện Model của Sequelize. Đối với các sự kiện toàn cục, hãy lắng nghe bằng cách sử dụng định dạng tên <sequelize_model_global_event>, và đối với các sự kiện Model đơn lẻ, hãy sử dụng định dạng tên <model_name>.<sequelize_model_event>.
Để biết mô tả tham số và ví dụ chi tiết về tất cả các loại sự kiện tích hợp, vui lòng tham khảo phần Sự kiện tích hợp.
off()Xóa một hàm lắng nghe sự kiện.
Chữ ký
off(name: string, listener: Function)Tham số
| Tham số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
| name | string | - | Tên sự kiện |
| listener | Function | - | Trình lắng nghe sự kiện |
Ví dụ
auth()Xác thực kết nối cơ sở dữ liệu. Có thể được sử dụng để đảm bảo ứng dụng đã thiết lập kết nối với dữ liệu.
Chữ ký
auth(options: QueryOptions & { retry?: number } = {}): Promise<boolean>Tham số
| Tham số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
options? | Object | - | Các tùy chọn xác thực |
options.retry? | number | 10 | Số lần thử lại khi xác thực thất bại |
options.transaction? | Transaction | - | Đối tượng giao dịch |
options.logging? | boolean | Function | false | Có in nhật ký không |
Ví dụ
reconnect()Kết nối lại cơ sở dữ liệu.
Ví dụ
closed()Kiểm tra xem kết nối cơ sở dữ liệu đã đóng hay chưa.
Chữ ký
closed(): booleanclose()Đóng kết nối cơ sở dữ liệu. Tương đương với sequelize.close().
sync()Đồng bộ hóa cấu trúc bảng cơ sở dữ liệu. Tương đương với sequelize.sync(), các tham số tham khảo tài liệu Sequelize.
clean()Dọn dẹp cơ sở dữ liệu, sẽ xóa tất cả các bảng dữ liệu.
Chữ ký
clean(options: CleanOptions): Promise<void>Tham số
| Tham số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
options.drop | boolean | false | Có xóa tất cả các bảng dữ liệu không |
options.skip | string[] | - | Cấu hình tên bảng cần bỏ qua |
options.transaction | Transaction | - | Đối tượng giao dịch |
Ví dụ
Xóa tất cả các bảng trừ bảng users.
defineCollection()Tạo nội dung cấu hình cho một bảng dữ liệu.
Chữ ký
defineCollection(name: string, config: CollectionOptions): CollectionOptionsTham số
| Tham số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
collectionOptions | CollectionOptions | - | Giống với tất cả các tham số của db.collection() |
Ví dụ
Đối với tệp cấu hình bảng dữ liệu sẽ được db.import() nhập:
extendCollection()Mở rộng nội dung cấu hình cấu trúc bảng đã có trong bộ nhớ, chủ yếu dùng cho nội dung tệp được nhập bằng phương thức import(). Phương thức này là một phương thức cấp cao nhất được xuất từ gói @nocobase/database, không được gọi thông qua một phiên bản db. Bạn cũng có thể sử dụng bí danh extend.
Chữ ký
extendCollection(collectionOptions: CollectionOptions, mergeOptions?: MergeOptions): ExtendedCollectionOptionsTham số
| Tham số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
collectionOptions | CollectionOptions | - | Giống với tất cả các tham số của db.collection() |
mergeOptions? | MergeOptions | - | Các tham số cho gói npm deepmerge |
Ví dụ
Định nghĩa bảng books gốc (books.ts):
Định nghĩa bảng books mở rộng (books.extend.ts):
Nếu hai tệp trên được nhập khi gọi import(), sau khi được mở rộng thêm bằng extend(), bảng books sẽ có cả hai trường title và price.
Phương thức này rất hữu ích khi mở rộng cấu trúc bảng đã được định nghĩa bởi các plugin hiện có.
Cơ sở dữ liệu sẽ kích hoạt các sự kiện tương ứng sau đây tại các giai đoạn khác nhau trong vòng đời của nó. Việc đăng ký các sự kiện này bằng phương thức on() và xử lý cụ thể có thể đáp ứng một số nhu cầu nghiệp vụ.
'beforeSync' / 'afterSync'Kích hoạt trước và sau khi cấu hình cấu trúc bảng mới (trường, chỉ mục, v.v.) được đồng bộ hóa vào cơ sở dữ liệu. Thường được kích hoạt khi bộ sưu tập.sync() (gọi nội bộ) được thực thi và thường được sử dụng để xử lý logic cho các phần mở rộng trường đặc biệt.
Chữ ký
Kiểu
Ví dụ
'beforeValidate' / 'afterValidate'Trước khi tạo hoặc cập nhật dữ liệu, có một quá trình xác thực dữ liệu dựa trên các quy tắc được định nghĩa trong bộ sưu tập. Các sự kiện tương ứng sẽ được kích hoạt trước và sau quá trình xác thực. Điều này xảy ra khi gọi repository.create() hoặc repository.update().
Chữ ký
Kiểu
Ví dụ
'beforeCreate' / 'afterCreate'Các sự kiện tương ứng sẽ được kích hoạt trước và sau khi tạo một bản ghi dữ liệu. Điều này xảy ra khi gọi repository.create().
Chữ ký
Kiểu
Ví dụ
'beforeUpdate' / 'afterUpdate'Các sự kiện tương ứng sẽ được kích hoạt trước và sau khi cập nhật một bản ghi dữ liệu. Điều này xảy ra khi gọi repository.update().
Chữ ký
Kiểu
Ví dụ
'beforeSave' / 'afterSave'Các sự kiện tương ứng sẽ được kích hoạt trước và sau khi tạo hoặc cập nhật một bản ghi dữ liệu. Điều này xảy ra khi gọi repository.create() hoặc repository.update().
Chữ ký
Kiểu
Ví dụ
'beforeDestroy' / 'afterDestroy'Các sự kiện tương ứng sẽ được kích hoạt trước và sau khi xóa một bản ghi dữ liệu. Điều này xảy ra khi gọi repository.destroy().
Chữ ký
Kiểu
Ví dụ
'afterCreateWithAssociations'Sự kiện này được kích hoạt sau khi tạo một bản ghi dữ liệu có dữ liệu liên kết phân cấp. Điều này xảy ra khi gọi repository.create().
Chữ ký
Kiểu
Ví dụ
'afterUpdateWithAssociations'Sự kiện này được kích hoạt sau khi cập nhật một bản ghi dữ liệu có dữ liệu liên kết phân cấp. Điều này xảy ra khi gọi repository.update().
Chữ ký
Kiểu
Ví dụ
'afterSaveWithAssociations'Sự kiện này được kích hoạt sau khi tạo hoặc cập nhật một bản ghi dữ liệu có dữ liệu liên kết phân cấp. Điều này xảy ra khi gọi repository.create() hoặc repository.update().
Chữ ký
Kiểu
Ví dụ
'beforeDefineCollection'Kích hoạt trước khi một bảng dữ liệu được định nghĩa, ví dụ, khi gọi db.collection().
Lưu ý: Đây là một sự kiện đồng bộ.
Chữ ký
Kiểu
Ví dụ
'afterDefineCollection'Kích hoạt sau khi một bảng dữ liệu được định nghĩa, ví dụ, khi gọi db.collection().
Lưu ý: Đây là một sự kiện đồng bộ.
Chữ ký
Kiểu
Ví dụ
'beforeRemoveCollection' / 'afterRemoveCollection'Kích hoạt trước và sau khi một bảng dữ liệu được xóa khỏi bộ nhớ, ví dụ, khi gọi db.removeCollection().
Lưu ý: Đây là một sự kiện đồng bộ.
Chữ ký
Kiểu
Ví dụ