Skip to content

Deleting from a relation

This operation deletes child objects from a parent in a relationship. The operation does not delete the actual objects, neither it deletes the relationship column. The operation simply disconnects the child objects from the parent.

// Break the relation between the objects represented 
// by the "children" argument and the parent object.
// The "children" argument can be:
//    - a whereClause
//    - OpResult 
//    - list of the objectId/Map/Custom class object values.
//
// The "parent" argument can be:
//    - a Map
//    - objectId
//    - custom class instance
//    - OpResult
//    - OpResultValueReference
unitOfWorkInstance.deleteRelation(dynamic parent, 
                               String columnName, 
                               dynamic children, 
                               [String parentTable]);

Return Value

The operation returns an OpResult object which represents the result of this operation - number of child objects disconnected from the parent in  the relation.

Examples

The examples are organized by two levels: first is how the parent object is represented in the client program, then by the type of the child collection.

Parent object is represented as

** The child objects are represented as**

final unitOfWork = UnitOfWork();

// This is an array for child objects.
// They are referenced using objectId values.
// The example hard-codes the array, but in
// your code you'd get the objectId values
// from your data model or using a query
final giftIds = [
   "EE3BF4B5-DB88-1425-FF89-CC11B7707500",
   "0CF23E36-FCC0-4E04-FF3E-8B67E6E27200",
   "DFFEDE1D-E423-2472-FF71-26EEC3F23700"];

// this is the objectId of the parent object.
final personObjectId = "E7AD83E0-1B4E-D250-FF46-61BFAB18D700";

// the name of the table where the parent object is stored
final parentTableName = "Person";

// the name of the relation column
final relationColumnName = "wishlist";

// add the deleteRelation call to the transaction
unitOfWork.deleteRelation(
   personObjectId,
   relationColumnName,
   giftIds,
   parentTableName
);

// run the transaction
unitOfWork.execute().then((result) => print("transaction complete - $result"));
final unitOfWork = UnitOfWork();

final iPad = {
 "objectId": "EE3BF4B5-DB88-1425-FF89-CC11B7707500",
};

final iPhone = {
 "objectId": "0CF23E36-FCC0-4E04-FF3E-8B67E6E27200",
};

// This is a list of gift objects. These objects
// will be children in the relationship. As you
// can see the objects are constructed manually
// and their objectId's are set, however, in your
// application they would be loaded from the
// server. This is done here to keep the example
// more succinct.
final gifts = [iPad, iPhone];

// this is the objectId of the parent object.
final personObjectId = "E7AD83E0-1B4E-D250-FF46-61BFAB18D700";

// the name of the table where the parent object is stored
final parentTableName = "Person";

// the name of the relation column
final relationColumnName = "wishlist";

// add the deleteRelation call to the transaction
unitOfWork.deleteRelation(
   personObjectId,
   relationColumnName,
   gifts,
   parentTableName
);

// run the transaction
unitOfWork.execute().then((result) => print("transaction complete - $result"));

final unitOfWork = UnitOfWork();

final iPad = Gift()
 ..objectId = "EE3BF4B5-DB88-1425-FF89-CC11B7707500";

final iPhone = Gift()
 ..objectId = "0CF23E36-FCC0-4E04-FF3E-8B67E6E27200";

// This is a list of gift objects. These objects
// will be children in the relationship. As you
// can see the objects are constructed manually
// and their objectId's are set, however, in your
// application they would be loaded from the
// server. This is done here to keep the example
// more succinct.
final gifts = [iPad, iPhone];

// this is the objectId of the parent object.
final personObjectId = "E7AD83E0-1B4E-D250-FF46-61BFAB18D700";

// the name of the table where the parent object is stored
final parentTableName = "Person";

// the name of the relation column
final relationColumnName = "wishlist";

// add the deleteRelation call to the transaction
unitOfWork.deleteRelation(
   personObjectId,
   relationColumnName,
   gifts,
   parentTableName
);

// run the transaction
unitOfWork.execute().then((result) => print("transaction complete - $result"));
The Gift class is shown below:
@reflector
class Gift {
   String objectId;
   String name;
   double price;
}

final unitOfWork = UnitOfWork();

// compose a query to fetch the gift objects
final queryBuilder = DataQueryBuilder();
queryBuilder.whereClause = "name in ( 'Apple iPad', 'Apple iPhone', 'Selfie Stick')";

// add the find operation to the transaction
// notice the result of the operation is saved in a variable -
// it will be used further in the deleteRelation operation
final gifts = unitOfWork.find("Gift", queryBuilder);

// this is the objectId of the parent object.
final personObjectId = "E7AD83E0-1B4E-D250-FF46-61BFAB18D700";

// the name of the table where the parent object is stored
final parentTableName = "Person";

// the name of the relation column
final relationColumnName = "wishlist";

// add the deleteRelation call to the transaction
unitOfWork.deleteRelation(
   personObjectId,
   relationColumnName,
   gifts,
   parentTableName
);

// run the transaction
unitOfWork.execute().then((result) => print("transaction complete - $result"));

** The child objects are represented as**

final unitOfWork = UnitOfWork();

// This is an array for child objects.
// They are referenced using objectId values.
// The example hard-codes the array, but in
// your code you'd get the objectId values
// from your data model or using a query
final giftIds =[
   "EE3BF4B5-DB88-1425-FF89-CC11B7707500",
   "0CF23E36-FCC0-4E04-FF3E-8B67E6E27200",
   "DFFEDE1D-E423-2472-FF71-26EEC3F23700"];

// this is the parent object. The only property that
// matters for the sake of establishing a relation
// is objectId. In your program you would be
// retrieving the object from the server. The
// technique shown here is for code brevity.
final personObject = {
 "objectId": "E7AD83E0-1B4E-D250-FF46-61BFAB18D700"
};

// the name of the table where the parent object is stored
final parentTableName = "Person";

// the name of the relation column
final relationColumnName = "wishlist";

// add the deleteRelation call to the transaction
unitOfWork.deleteRelation(
   personObject,
   relationColumnName,
   giftIds,
   parentTableName
);

// run the transaction
unitOfWork.execute().then((result) => print("transaction complete - $result"));
final unitOfWork = UnitOfWork();

final iPad = {
"objectId": "EE3BF4B5-DB88-1425-FF89-CC11B7707500"
};

final iPhone = {
"objectId": "0CF23E36-FCC0-4E04-FF3E-8B67E6E27200"
};

// This is a list of gift objects. These objects
// will be children in the relationship. As you
// can see the objects are constructed manually
// and their objectId's are set, however, in your
// application they would be loaded from the
// server. This is done here to keep the example
// more succinct.
final gifts = [iPad, iPhone];

// this is the parent object. The only property that
// matters for the sake of establishing a relation
// is objectId. In your program you would be
// retrieving the object from the server. The
// technique shown here is for code brevity.
final personObject = {
"objectId": "E7AD83E0-1B4E-D250-FF46-61BFAB18D700"
};

// the name of the table where the parent object is stored
final parentTableName = "Person";

// the name of the relation column
final relationColumnName = "wishlist";

// add the deleteRelation call to the transaction
unitOfWork.deleteRelation(
   personObject,
   relationColumnName,
   gifts,
   parentTableName
);

// run the transaction
unitOfWork.execute().then((result) => print("transaction complete - $result"));

final unitOfWork = UnitOfWork();

final iPad = Gift()
 ..objectId = "EE3BF4B5-DB88-1425-FF89-CC11B7707500";

final iPhone = Gift()
 ..objectId = "0CF23E36-FCC0-4E04-FF3E-8B67E6E27200";

// This is a list of gift objects. These objects
// will be children in the relationship. As you
// can see the objects are constructed manually
// and their objectId's are set, however, in your
// application they would be loaded from the
// server. This is done here to keep the example
// more succinct.
final gifts = [iPad, iPhone];

// this is the parent object. The only property that
// matters for the sake of establishing a relation
// is objectId. In your program you would be
// retrieving the object from the server. The
// technique shown here is for code brevity.
final personObject = {
 "objectId": "E7AD83E0-1B4E-D250-FF46-61BFAB18D700"
};

// the name of the table where the parent object is stored
final parentTableName = "Person";

// the name of the relation column
final relationColumnName = "wishlist";

// add the deleteRelation call to the transaction
unitOfWork.deleteRelation( 
   personObject,
   relationColumnName,
   gifts,
   parentTableName);

// run the transaction
unitOfWork.execute().then((result) => print("transaction complete - $result"));
The Gift class is shown below:
@reflector
class Gift {
   String objectId;
   String name;
   double price;
}

final unitOfWork = UnitOfWork();

// compose a query to fetch the gift objects
final queryBuilder = DataQueryBuilder();
queryBuilder.whereClause = "name in ( 'Apple iPad', 'Apple iPhone', 'Selfie Stick')";

// add the find operation to the transaction
// notice the result of the operation is saved in a variable -
// it will be used further in the deleteRelation operation
final gifts = unitOfWork.find("Gift", queryBuilder);

// this is the parent object. The only property that
// matters for the sake of establishing a relation
// is objectId. In your program you would be
// retrieving the object from the server. The
// technique shown here is for code brevity.
final personObject = {
 "objectId": "E7AD83E0-1B4E-D250-FF46-61BFAB18D700"
};

// the name of the table where the parent object is stored
final parentTableName = "Person";

// the name of the relation column
final relationColumnName = "wishlist";

// add the deleteRelation call to the transaction
unitOfWork.deleteRelation(
   personObject,
   relationColumnName,
   gifts,
   parentTableName
);

// run the transaction
unitOfWork.execute().then((result) => print("transaction complete - $result"));

** The child objects are represented as**

final unitOfWork = UnitOfWork();

// This is an array for child objects.
// They are referenced using objectId values.
// The example hard-codes the array, but in
// your code you'd get the objectId values
// from your data model or using a query
final giftIds = [
   "EE3BF4B5-DB88-1425-FF89-CC11B7707500",
   "0CF23E36-FCC0-4E04-FF3E-8B67E6E27200",
   "DFFEDE1D-E423-2472-FF71-26EEC3F23700"];

// this is the parent object. The only property that
// matters for the sake of establishing a relation
// is objectId. In your program you would be
// retrieving the object from the server. The
// technique shown here is for code brevity.
final personObject = Person()
 ..objectId = "E7AD83E0-1B4E-D250-FF46-61BFAB18D700";

// the name of the relation column
final relationColumnName = "wishlist";

// add the deleteRelation call to the transaction
unitOfWork.deleteRelation(
   personObject,
   relationColumnName,
   giftIds
);

// run the transaction
unitOfWork.execute().then((result) => print("transaction complete - $result"));
final unitOfWork = UnitOfWork();

final iPad = {
 "objectId": "EE3BF4B5-DB88-1425-FF89-CC11B7707500"
};

final iPhone = {
"objectId": "0CF23E36-FCC0-4E04-FF3E-8B67E6E27200"
};

// This is a list of gift objects. These objects
// will be children in the relationship. As you
// can see the objects are constructed manually
// and their objectId's are set, however, in your
// application they would be loaded from the
// server. This is done here to keep the example
// more succinct.
final gifts = [iPad, iPhone];

// this is the parent object. The only property that
// matters for the sake of establishing a relation
// is objectId. In your program you would be
// retrieving the object from the server. The
// technique shown here is for code brevity.
final personObject = Person()
 ..objectId = "E7AD83E0-1B4E-D250-FF46-61BFAB18D700";

// the name of the relation column
final relationColumnName = "wishlist";

// add the deleteRelation call to the transaction
unitOfWork.deleteRelation(
   personObject,
   relationColumnName,
   gifts
);

// run the transaction
unitOfWork.execute().then((result) => print("transaction complete - $result"));

final unitOfWork = UnitOfWork();

final iPad = Gift()
 ..objectId = "EE3BF4B5-DB88-1425-FF89-CC11B7707500";

final iPhone = Gift()
 ..objectId = "0CF23E36-FCC0-4E04-FF3E-8B67E6E27200";

// This is a list of gift objects. These objects
// will be children in the relationship. As you
// can see the objects are constructed manually
// and their objectId's are set, however, in your
// application they would be loaded from the
// server. This is done here to keep the example
// more succinct.
final gifts = [iPad, iPhone];

// this is the parent object. The only property that
// matters for the sake of establishing a relation
// is objectId. In your program you would be
// retrieving the object from the server. The
// technique shown here is for code brevity.
final personObject = Person()
 ..objectId = "E7AD83E0-1B4E-D250-FF46-61BFAB18D700";

// the name of the relation column
final relationColumnName = "wishlist";

// add the deleteRelation call to the transaction
unitOfWork.deleteRelation(
   personObject,
   relationColumnName,
   gifts
);

// run the transaction
unitOfWork.execute().then((result) => print("transaction complete - $result"));
The Gift class is shown below:
@reflector
class Gift {
   String objectId;
   String name;
   double price;
}

final unitOfWork = UnitOfWork();

// compose a query to fetch the gift objects
final queryBuilder = DataQueryBuilder();
queryBuilder.whereClause = "name in ( 'Apple iPad', 'Apple iPhone', 'Selfie Stick')";
// add the find operation to the transaction
// notice the result of the operation is saved in a variable -
// it will be used further in the deleteRelation operation
final gifts = unitOfWork.find("Gift", queryBuilder);

// this is the parent object. The only property that
// matters for the sake of establishing a relation
// is objectId. In your program you would be
// retrieving the object from the server. The
// technique shown here is for code brevity.
final personObject = Person()
 ..objectId = "E7AD83E0-1B4E-D250-FF46-61BFAB18D700";

// the name of the relation column
final relationColumnName = "wishlist";

// add the deleteRelation call to the transaction
unitOfWork.deleteRelation(
   personObject,
   relationColumnName,
   gifts
);

// run the transaction
unitOfWork.execute().then((result) => print("transaction complete - $result"));

** The child objects are represented as**

final unitOfWork = UnitOfWork();

// This is an array for child objects.
// They are referenced using objectId values.
// The example hard-codes the array, but in
// your code you'd get the objectId values
// from your data model or using a query
final giftIds = [
   "EE3BF4B5-DB88-1425-FF89-CC11B7707500",
   "0CF23E36-FCC0-4E04-FF3E-8B67E6E27200",
   "DFFEDE1D-E423-2472-FF71-26EEC3F23700"];

// compose a query to retrieve the person
// from the database
final queryBuilder = DataQueryBuilder();

// this is the query which identifies the person of interest,
// this person object will be used as the parent in the relationship
queryBuilder.whereClause = "name = 'John Doe' and age = 36";

// add the object retriefinal operation to the transaction
final findResult = unitOfWork.find("Person", queryBuilder);

// since "findResult" references a collection of objects,
// get the first one from the collection. The reason we need to
// do this is because the deleteRelation operation below
// expects only one parent object. We know the first object
// will be the parent, that's why the "resolveTo" index is 0.
final paarentObjectRef = findResult.resolveTo(resultIndex: 0);

// the name of the relation column
final relationColumnName = "wishlist";

// add the deleteRelation call to the transaction
unitOfWork.deleteRelation(
   paarentObjectRef,
   relationColumnName,
   giftIds
);

// run the transaction
unitOfWork.execute().then((result) => print("transaction complete - $result"));
final unitOfWork = UnitOfWork();

final iPad = {
 "objectId": "EE3BF4B5-DB88-1425-FF89-CC11B7707500"
};

final iPhone = {
"objectId": "0CF23E36-FCC0-4E04-FF3E-8B67E6E27200"
};

// This is a list of gift objects. These objects
// will be children in the relationship. As you
// can see the objects are constructed manually
// and their objectId's are set, however, in your
// application they would be loaded from the
// server. This is done here to keep the example
// more succinct.
final gifts = [iPad, iPhone];

// compose a query to retrieve the person
// from the database
final queryBuilder = DataQueryBuilder();
// this is the query which identifies the person of interest,
// this person object will be used as the parent in the relationship
queryBuilder.whereClause = "name = 'John Doe' and age = 36";

// add the object retriefinal operation to the transaction
final findResult = unitOfWork.find("Person", queryBuilder);

// since "findResult" references a collection of objects,
// get the first one from the collection. The reason we need to
// do this is because the deleteRelation operation below
// expects only one parent object. We know the first object
// will be the parent, that's why the "resolveTo" index is 0.
final parentObjectRef = findResult.resolveTo(resultIndex: 0);

// the name of the relation column
final relationColumnName = "wishlist";

// add the deleteRelation call to the transaction
unitOfWork.deleteRelation(
   parentObjectRef,
   relationColumnName,
   gifts);

// run the transaction
unitOfWork.execute().then((result) => print("transaction complete - $result"));

final unitOfWork = UnitOfWork();
final iPad = Gift()
 ..objectId = "EE3BF4B5-DB88-1425-FF89-CC11B7707500";

final iPhone = Gift()
 ..objectId = "0CF23E36-FCC0-4E04-FF3E-8B67E6E27200";

// This is a list of gift objects. These objects
// will be children in the relationship. As you
// can see the objects are constructed manually
// and their objectId's are set, however, in your
// application they would be loaded from the
// server. This is done here to keep the example
// more succinct.
final gifts = [iPad, iPhone];

// compose a query to retrieve the person
// from the database
final queryBuilder = DataQueryBuilder();
// this is the query which identifies the person of interest,
// this person object will be used as the parent in the relationship
queryBuilder.whereClause = "name = 'John Doe' and age = 36";

// add the object retriefinal operation to the transaction
final findResult = unitOfWork.find("Person", queryBuilder);

// since "findResult" references a collection of objects,
// get the first one from the collection. The reason we need to
// do this is because the deleteRelation operation below
// expects only one parent object. We know the first object
// will be the parent, that's why the "resolveTo" index is 0.
final parentObjectRef = findResult.resolveTo(resultIndex: 0);

// the name of the relation column
final relationColumnName = "wishlist";

// add the deleteRelation call to the transaction
unitOfWork.deleteRelation(
   parentObjectRef,
   relationColumnName,
   gifts
);

// run the transaction
unitOfWork.execute().then((result) => print("transaction complete - $result"));
The Gift class is shown below:
@reflector
class Gift {
   String objectId;
   String name;
   double price;
}

final unitOfWork = UnitOfWork();

// compose a query to fetch the gift objects
final queryBuilder = DataQueryBuilder();
queryBuilder.whereClause = "name in ( 'Apple iPad', 'Apple iPhone', 'Selfie Stick')";

// add the find operation to the transaction
// notice the result of the operation is saved in a variable -
// it will be used further in the deleteRelation operation
final gifts = unitOfWork.find("Gift", queryBuilder);
// compose a query to retrieve the person
// from the database
final parentQueryBuilder = DataQueryBuilder();
// this is the query which identifies the person of interest,
// this person object will be used as the parent in the relationship
parentQueryBuilder.whereClause = "name = 'John Doe' and age = 36";

// add the object retriefinal operation to the transaction
final findResult = unitOfWork.find("Person", parentQueryBuilder);

// since "findResult" references a collection of objects,
// get the first one from the collection. The reason we need to
// do this is because the deleteRelation operation below
// expects only one parent object. We know the first object
// will be the parent, that's why the "resolveTo" index is 0.
final parentObjectRef = findResult.resolveTo(resultIndex: 0);

// the name of the relation column
final relationColumnName = "wishlist";

// add the deleteRelation call to the transaction
unitOfWork.deleteRelation(
   parentObjectRef,
   relationColumnName,
   gifts
);

// run the transaction
unitOfWork.execute().then((result) => print("transaction complete - $result"));