Field
Tổng quan
Lớp quản lý field của bảng dữ liệu (lớp trừu tượng). Đồng thời cũng là lớp cơ sở cho mọi kiểu field, các kiểu field khác đều được triển khai bằng cách kế thừa lớp này.
Cách tùy chỉnh field có thể tham khảo [Mở rộng kiểu field].
Constructor
Thông thường nhà phát triển không gọi trực tiếp, mà chủ yếu gọi qua db.collection({ fields: [] }) làm điểm vào ủy quyền.
Khi mở rộng field thì chủ yếu kế thừa lớp trừu tượng Field, sau đó đăng ký vào instance Database để triển khai.
Chữ ký
constructor(options: FieldOptions, context: FieldContext)
Tham số
Thành viên của instance
name
Tên field.
type
Kiểu field.
dataType
Kiểu lưu trữ trong cơ sở dữ liệu của field.
options
Tham số cấu hình khởi tạo của field.
context
Đối tượng ngữ cảnh field.
Phương thức cấu hình
on()
Cách định nghĩa nhanh dựa trên sự kiện bảng dữ liệu. Tương đương với db.on(this.collection.name + '.' + eventName, listener).
Khi kế thừa thường không cần override phương thức này.
Chữ ký
on(eventName: string, listener: (...args: any[]) => void)
Tham số
off()
Cách gỡ bỏ nhanh dựa trên sự kiện bảng dữ liệu. Tương đương với db.off(this.collection.name + '.' + eventName, listener).
Khi kế thừa thường không cần override phương thức này.
Chữ ký
off(eventName: string, listener: (...args: any[]) => void)
Tham số
bind()
Nội dung thực thi được kích hoạt khi field được thêm vào bảng dữ liệu. Thường dùng để thêm event listener cho bảng dữ liệu và các xử lý khác.
Khi kế thừa cần gọi super.bind() tương ứng trước.
Chữ ký
bind()
unbind()
Nội dung thực thi được kích hoạt khi field bị gỡ khỏi bảng dữ liệu. Thường dùng để gỡ event listener của bảng dữ liệu và các xử lý khác.
Khi kế thừa cần gọi super.unbind() tương ứng trước.
Chữ ký
unbind()
get()
Lấy giá trị của một tùy chọn cấu hình của field.
Chữ ký
get(key: string): any
Tham số
Ví dụ
merge()
Merge giá trị của các tùy chọn cấu hình của field.
Chữ ký
merge(options: { [key: string]: any }): void
Tham số
Ví dụ
remove()
Gỡ field khỏi bảng dữ liệu (chỉ gỡ khỏi bộ nhớ).
Ví dụ
Phương thức cơ sở dữ liệu
removeFromDb()
Gỡ field khỏi cơ sở dữ liệu.
Chữ ký
removeFromDb(options?: Transactionable): Promise<void>
Tham số
existsInDb()
Kiểm tra field có tồn tại trong cơ sở dữ liệu hay không.
Chữ ký
existsInDb(options?: Transactionable): Promise<boolean>
Tham số
Danh sách kiểu field có sẵn
NocoBase đã tích hợp sẵn một số kiểu field thường dùng, bạn có thể trực tiếp dùng tên type tương ứng để chỉ định kiểu khi định nghĩa field cho bảng dữ liệu. Cấu hình tham số của các kiểu field khác nhau là khác nhau, có thể tham kh ảo danh sách bên dưới.
Các tùy chọn cấu hình của tất cả các kiểu field, ngoài những phần được giới thiệu thêm ở dưới, đều được truyền thẳng đến Sequelize, nên mọi tùy chọn cấu hình mà Sequelize hỗ trợ đều có thể dùng ở đây (như allowNull, defaultValue, v.v.).
Ngoài ra, kiểu field phía server chủ yếu giải quyết vấn đề lưu trữ trong cơ sở dữ liệu và một phần thuật toán, không liên quan nhiều đến kiểu hiển thị field và component sử dụng ở phía frontend. Kiểu field phía frontend có thể tham khảo phần hướng dẫn tương ứng.
'boolean'
Kiểu giá trị logic.
Ví dụ
'integer'
Kiểu số nguyên (32 bit).
Ví dụ
'bigInt'
Kiểu số nguyên lớn (64 bit).
Ví dụ
'double'
Kiểu số thực dấu chấm động độ chính xác kép (64 bit).
Ví dụ
'real'
Kiểu số thực (chỉ áp dụng cho PG).
'decimal'
Kiểu số thập phân.
'string'
Kiểu chuỗi. Tương đương với kiểu VARCHAR của hầu hết cơ sở dữ liệu.
Ví dụ
'text'
Kiểu văn bản. Tương đương với kiểu TEXT của hầu hết cơ sở dữ liệu.
Ví dụ
'password'
Kiểu mật khẩu (mở rộng của NocoBase). Mã hóa mật khẩu dựa trên phương thức scrypt của package crypto gốc trong Node.js.
Ví dụ
Tham số
'date'
Kiểu ngày.
'time'
Kiểu thời gian.
'array'
Kiểu mảng (chỉ áp dụng cho PG).
'json'
Kiểu JSON.
'jsonb'
Kiểu JSONB (chỉ áp dụng cho PG, các DB khác sẽ tương thích thành kiểu 'json').
'uuid'
Kiểu UUID.
'uid'
Kiểu UID (mở rộng của NocoBase). Kiểu định danh chuỗi ngẫu nhiên ngắn.
'formula'
Kiểu công thức (mở rộng của NocoBase). Có thể cấu hình tính toán công thức toán học dựa trên mathjs, trong công thức có thể tham chiếu giá trị các cột khác trong cùng một bản ghi để tham gia tính toán.
Ví dụ
'radio'
Kiểu radio (mở rộng của NocoBase). Trong toàn bộ bảng tối đa chỉ có một hàng có giá trị field này là true, các hàng khác đều là false hoặc null.
Ví dụ
Trong toàn hệ thống chỉ có một user được đánh dấu là root, sau khi giá trị root của một user khác được đổi thành true, mọi bản ghi khác có root là true đều sẽ bị đổi thành false:
'sort'
Kiểu sắp xếp (mở rộng của NocoBase). Sắp xếp dựa trên số nguyên, tự động sinh số thứ tự mới cho bản ghi mới, sắp xếp lại số thứ tự khi di chuyển dữ liệu.
Nếu bảng dữ liệu định nghĩa tùy chọn sortable, field tương ứng cũng sẽ được tự động sinh ra.
Ví dụ
Bài viết có thể sắp xếp theo user sở hữu:
'virtual'
Kiểu virtual. Không lưu trữ dữ liệu thực tế, chỉ dùng khi định nghĩa getter/setter đặc biệt.
'belongsTo'
Kiểu quan hệ nhiều-một. Khóa ngoại được lưu ở chính bảng, ngược với hasOne/hasMany.
Ví dụ
Mỗi bài viết thuộc về một tác giả nào đó:
'hasOne'
Kiểu quan hệ một-một. Khóa ngoại được lưu ở bảng quan hệ, ngược với belongsTo.
Ví dụ
Mỗi user đều có một thông tin cá nhân:
'hasMany'
Kiểu quan hệ một-nhiều. Khóa ngoại được lưu ở bảng quan hệ, ngược với belongsTo.
Ví dụ
Mỗi user có thể sở hữu nhiều bài viết:
'belongsToMany'
Kiểu quan hệ nhiều-nhiều. Dùng bảng trung gian để lưu khóa ngoại của hai bên. Nếu không chỉ định b ảng đã tồn tại làm bảng trung gian, hệ thống sẽ tự động tạo bảng trung gian.
Ví dụ
Mỗi bài viết có thể gắn nhiều tag, mỗi tag cũng có thể được nhiều bài viết gắn vào:

