[]
DataManager supports defining relationships between tables.
A relationship connects a field in one table to a field in another table.
After a relationship is created, fields from the related table can be accessed using the relationship name.
Relationships are defined at the DataManager level.
Use addRelationship to define a relationship between two tables.
dataManager.addRelationship(
sourceTable,
sourceFieldName,
sourceRelationshipName,
targetTable,
targetFieldName,
targetRelationshipName
);sourceTable - The table where the relationship is defined.
sourceFieldName - The field in the source table used for matching.
sourceRelationshipName - The name used to access the related table from the source table.
targetTable - The related table.
targetFieldName - The field in the target table used for matching.
targetRelationshipName - The name used to access the source table from the target table.
The method returns an IRelationship object describing the relationship.
const dataManager = spread.dataManager();
const orders = dataManager.addTable("orders", {
data: [
{ orderId: 1, orderDate: "2024-01-01", employeeId: 100 },
{ orderId: 2, orderDate: "2024-01-02", employeeId: 101 }
]
});
const employees = dataManager.addTable("employees", {
data: [
{ employeeId: 100, firstName: "Nancy", title: "Manager", address: "Seattle" },
{ employeeId: 101, firstName: "Andrew", title: "Sales", address: "Tacoma" }
]
});
// Create relationship
const relationship = dataManager.addRelationship(
orders,
"employeeId",
"employee",
employees,
"employeeId",
"orders"
);
// Access related fields in a view
const myView = orders.addView("myView", [
{ value: "orderId" },
{ value: "orderDate" },
{ value: "employee.firstName" },
{ value: "employee.title" },
{ value: "employee.address" }
]);In this example:
"employee" is the relationship name defined on the orders table.
Related table fields are accessed using dot notation:
relationshipName.fieldNameAfter a relationship is created, related fields can be referenced in a View using:
relationshipName.fieldNameExample:
{ value: "employee.firstName" }The relationship name acts as a navigation path to the related table.
Relationships are stored in the DataManager.
Each call to addRelationship creates a new relationship entry.
Multiple relationships can coexist within the same DataManager.
Relationship names are defined by the developer. The API does not enforce uniqueness of relationship names.
Use removeRelationship to remove a relationship by name:
dataManager.removeRelationship("employee");After removal, related field access through that relationship name is no longer available.