Giao diện
Câu hỏi thường gặp
Có giới hạn số lượng target trong array không?
Không có giới hạn cứng từ plugin, nhưng nên giữ dưới vài trăm ID. Với array quá lớn, resolve sẽ chậm và query phức tạp. Nếu cần quan hệ lớn, dùng M2M truyền thống.
Xóa target record thì array ở source có tự cập nhật không?
Không tự động. Nếu xóa tag ID=3, các bản ghi có tagIds: [1, 3, 5] vẫn giữ nguyên. ID 3 sẽ trở thành dangling reference. Nên xử lý cleanup khi xóa target record.
Dùng MySQL có hoạt động không?
Có, nhưng hiệu năng kém hơn PostgreSQL. MySQL dùng cột JSON thay vì ARRAY native. Query phải dùng JSON_CONTAINS() thay vì array operators, chậm hơn với dataset lớn.
Có hỗ trợ filter/sort trên belongsToArray field không?
Hỗ trợ cơ bản:
- Filter: tìm bản ghi chứa target ID cụ thể (contains).
- Sort: không hỗ trợ sort theo giá trị array.
Nested create có tạo duplicate target record không?
Nếu gửi { name: "Tag A" } và "Tag A" đã tồn tại, plugin sẽ tạo mới (INSERT) — không kiểm tra trùng lặp. Nếu muốn tham chiếu record có sẵn, gửi { id: existing_id }.
Khác biệt giữa belongsToArray và hasMany?
| belongsToArray | hasMany | |
|---|---|---|
| FK ở đâu | Source table (cột array) | Target table |
| Cardinality | Source → nhiều target (qua array) | Source → nhiều target (qua FK) |
| Bảng trung gian | Không | Không |
| Metadata | Không | Có (trên target record) |
Update array thay thế hay thêm vào?
Thay thế hoàn toàn (replace). Khi update, giá trị array mới ghi đè giá trị cũ. Nếu muốn append, cần đọc array hiện tại, thêm ID mới, rồi gửi toàn bộ.
Có hỗ trợ polymorphic target không?
Không. Mỗi belongsToArray field chỉ trỏ đến một target collection. Nếu cần nhiều loại target, tạo nhiều field hoặc dùng kiến trúc khác.