Bỏ qua, đến nội dung

@digiforce-nc/plugin-field-m2m-array ​

Plugin cung cấp kiểu field many-to-many qua array — lưu quan hệ nhiều-nhiều trực tiếp trong một cột ARRAY/JSON/JSONB mà không cần tạo bảng junction trung gian.

Plugin này làm gì? ​

Hãy hình dung: quan hệ M2M truyền thống cần 3 bảng (source, junction, target). Plugin này đơn giản hóa bằng cách lưu danh sách target key trong một cột mảng trên bảng source. Ví dụ: bản ghi post có cột tagIds: [1, 3, 5] thay vì bảng posts_tags. Phù hợp cho quan hệ đơn giản, số lượng nhỏ-trung bình.

Ba nhiệm vụ chính ​

#Nhiệm vụChi tiết
1Relation type mớiĐăng ký belongsToArray trên SequelizeCollectionManager
2Array columnLưu target keys trong cột ARRAY (PostgreSQL) hoặc JSON/JSONB
3Nested operationsResolve nested create/update khi thao tác với target collection

Kiến trúc ​

Tổng quan ​

Plugin đăng ký relation type belongsToArray — biến thể của belongsTo nhưng cho phép nhiều target. Server xử lý FK wiring, nested operations; client cung cấp UI chọn nhiều record.

Luồng tạo bản ghi với M2M Array ​

Luồng nested create ​

Relation type: belongsToArray ​

Thuộc tínhMô tả
foreignKeyTên cột ARRAY trên source table (ví dụ: tagIds)
targetKeyPrimary key trên target table (ví dụ: id)
targetTên target collection
Column typeARRAY (PostgreSQL), JSON hoặc JSONB (MySQL, SQLite)

Hooks ​

HookSự kiệnHành động
afterCreateTạo bản ghi mớiVerify FK integrity — kiểm tra target keys tồn tại
beforeDestroyXóa bản ghiCleanup FK wiring — xóa references nếu cần

So sánh với M2M truyền thống ​

Tiêu chíM2M truyền thốngM2M Array
Số bảng3 (source + junction + target)2 (source + target)
QueryJOIN qua junctionResolve array trực tiếp
Hiệu năngTốt cho quan hệ lớnTốt cho quan hệ nhỏ-trung bình
Extra dataJunction có thể chứa metadataKhông có metadata trên quan hệ
DB supportMọi DBTốt nhất với PostgreSQL (ARRAY native)

Ví dụ sử dụng ​

Cấu hình field M2M Array ​

typescript
const tagsField = {
  name: 'tags',
  type: 'belongsToArray',
  interface: 'mbm',
  target: 'tags',
  foreignKey: 'tagIds',
  targetKey: 'id',
};

Thành phần client ​

Thành phầnMô tả
MBMFieldInterfaceĐịnh nghĩa interface cho field M2M array
MBMForeignKeyComponent hiển thị/cấu hình foreign key (array column)
MBMTargetKeyComponent hiển thị/cấu hình target key

Dependencies ​

PackageVai trò
@digiforce-nc/serverServer framework (peer)
@digiforce-nc/databaseDatabase ORM — đăng ký relation type
@digiforce-nc/clientClient framework — đăng ký component

Mục lục chi tiết ​