Skip to content

Single Step Retrieval

Important

Single Step Retrieval loads only a partial set of the related objects (default size of the retrieved related collection is 10). To load additional related objects, use the Relation Paging API .

This approach allows retrieval of a partial set of the related objects along with the parent object in a single findor findById request. Each relationship property (column) must be uniquely identified by name using the API documented below.

Retrieving a specific object with relations

Future<Map> Backendless.data.of("TABLE-NAME").findById(String id,
      {List<String> relations,
      int relationsDepth,
      DataQueryBuilder queryBuilder});
Future<E> Backendless.data.withClass<E>().findById(String id,
    {List<String> relations,
    int relationsDepth,
    DataQueryBuilder queryBuilder});

Retrieving a collection of objects with relations

DataQueryBuilder queryBuilder = DataQueryBuilder();
queryBuilder.related = ["RELATED-PROPERTY-NAME", 
                        "RELATED-PROPERTY-NAME.RELATION-OF-RELATION-PROP-NAME"];

Then load data using the constructed queryBuilder object with:

Future<List<Map>> Backendless.data.of("TABLE-NAME").find([DataQueryBuilder queryBuilder]);
Future<List<E>> Backendless.data.withClass<E>().find([DataQueryBuilder queryBuilder]);

where

Argument                Description
RELATED-PROPERTY-NAME Name of a related property to load. For example, if table Person has a relation "homeAddress" pointing to an object in the Address table, the value would be "homeAddress". The syntax allows to add relations of relations. For example, if the same Address table has a relation "country" pointing to the Country table, then "homeAddress.country" would instruct the related Country object to be loaded as well.
queryBuilder An instance of the com.backendless.persistence.DataQueryBuilder class. The class is used to identify related properties for relation retrieval, paging, sorting and search with whereClause.
TABLE-NAME Name of the table where the data should be retrieved from.
E Reference to a class which identifies the table from which the data should be loaded from.

Important

There are some limitations for the related object retrieval. Since Dart cannot reflect the type of the list in the runtime, there are two ways to declare the collection of related objects inside the custom parent class:

@reflector
class ParentTable {
  List<dynamic> children;  
}
or
@reflector
class ParentTable {
  List<ChildTable> _children;  
  set children(List value) => _children = value.cast<ChildTable>();  
  get children => _children;
}

Codeless Reference

Consider the following structure of the data table called employees :
data_single_step_retrieval_1

As you probably noticed, the skills column has a relation to the uniqueSkills data table with the following structure:

data_set_add_relation_object_example_2

One-to-many relation stored in the skills column references the following objects stored in the uniqueSkills data table:

data_single_step_retrieval_3

The example below retrieves all related objects of the parent object: Notice how the parent object is retrieved using the where clause condition: to obtain one object you must reference the objectId of the record in the where clause property.

data_single_step_retrieval_2

Important

For a detailed description of all input parameters see the Basic Object Retrieval topic of this guide.

After the Codeless logic runs, the operation returns the parent object containing three related children objects:

data_single_step_retrieval_4

The example below retrieves all parent objects and the corresponding related children objects from the data table:

data_single_step_retrieval_5

After the Codeless logic runs, the operation returns two parent objects containing related children records:

data_single_step_retrieval_6