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