Giao diện
FAQ
Tạo collection nhưng không thấy bảng trong database?
Nguyên nhân: Hook afterSaveWithAssociations chưa chạy hoặc migrate thất bại.
Kiểm tra:
- Xem log server — tìm lỗi migrate (VD: permission denied, duplicate table).
- Kiểm tra bảng metadata:
SELECT * FROM collections WHERE name = '<name>'— nếu có nghĩa là metadata đã lưu nhưng migrate lỗi. - Gọi
mainDataSource:refreshđể force reload + migrate lại.
Collection kế thừa (inherit) hoạt động thế nào?
Chỉ hỗ trợ PostgreSQL (table inheritance). Khi inherit trỏ đến collection cha:
- Bảng con kế thừa tất cả columns từ bảng cha.
- INSERT vào bảng con → record cũng xuất hiện khi SELECT bảng cha.
- Bảng con có thể thêm columns riêng.
Với MySQL/SQLite: field inherit bị bỏ qua.
Xóa field relation nhưng FK vẫn còn?
Hook afterDestroy cho field relation tự động xóa FK constraint. Nếu không:
- Kiểm tra transaction có rollback không.
- Kiểm tra
reverseField— xóa field gốc sẽ cascade xóa reverse field. - Xóa thủ công:
ALTER TABLE t_orders DROP CONSTRAINT fk_xxx.
syncFields phát hiện gì?
mainDataSource:syncFields so sánh columns thực tế với metadata:
| Trường hợp | Hành vi |
|---|---|
| Column mới trong DB | Thêm field metadata (infer type) |
| Column đã xóa trong DB | Đánh dấu field metadata là deleted |
| Type thay đổi | Cập nhật field type |
Chỉ sync chiều DB → metadata. Không tạo/xóa column vật lý.
Thứ tự load collection quan trọng không?
Rất quan trọng. CollectionRepository dùng topological sort để load theo thứ tự dependency:
- Collection không phụ thuộc → load trước.
- Collection có FK/inherit → load sau collection target.
- Circular dependency → log warning, load theo best effort.
Nếu thứ tự sai, FK constraint sẽ fail khi migrate.
Preset fields mặc định là gì?
Khi tạo collection mới qua UI, client tự động thêm:
| Field | Type | Mô tả |
|---|---|---|
id | bigInt | Primary key (snowflake) |
createdAt | date | Thời điểm tạo |
createdBy | belongsTo | User tạo |
updatedAt | date | Thời điểm cập nhật |
updatedBy | belongsTo | User cập nhật |
Có thể tắt bằng options.autoGenId: false hoặc bỏ các field khi tạo qua API.
Sao không dùng migration files mà dùng meta-driven?
Meta-driven cho phép admin non-developer tạo/sửa schema qua UI mà không cần viết code migration. Mọi thay đổi được lưu trong bảng metadata → plugin tự sinh DDL tương ứng.
Nhược điểm: khó version control so với migration files. Giải pháp: export metadata → commit vào Git.