Connecting users with their related data is a key function of user management. When you register (or update) a user object, you may need to create a relation between the user and some other entity/object stored in your Backendless Database. Since a user object is structurally a collection of properties, it is very easy to relate an object stored in Backendless with a user.
The code below shows how to register a user with a related object referenced through the “address” property:
final BackendlessUser user = new BackendlessUser(); user.setEmail("spiderman@backendless.com"); user.setPassword("greeng0blin"); Address address = new Address(); address.setStreet("123 Main St"); address.setCity("Dallas"); address.setState("Texas"); address.setZip("75032"); Backendless.Data.of(Address.class).save(address, new AsyncCallback() { @Override public void handleResponse(final Address savedAddress) { Log.i(TAG, “Relation has been created”); Backendless.UserService.register(user, new AsyncCallback() { @Override public void handleResponse(BackendlessUser registeredUser) { Log.i(TAG, “User has been registered”); Backendless.Data.of(BackendlessUser.class).setRelation(registeredUser, “address:Address:1”, Collections.singleton(savedAddress), new AsyncCallback() { @Override public void handleResponse(Integer response) { Log.i(TAG, “Relation has been set”); } @Override public void handleFault(BackendlessFault fault) { Log.e(TAG, fault.getMessage()); } }); } @Override public void handleFault(BackendlessFault fault) { Log.e(TAG, fault.getMessage()); } }); } @Override public void handleFault(BackendlessFault fault) { Log.e(TAG, fault.getMessage()); } });
val user = BackendlessUser() user.email = "spiderman@backendless.com" user.password = "greeng0blin" val address = Address() address.street = "123 Main St" address.city = "Dallas" address.state = "Texas" address.zip = "75032" Backendless.Data.of(Address::class.java).save(address, object : AsyncCallback{ override fun handleResponse(savedAddress: Address) { Log.i(TAG, “Relation has been created”) Backendless.UserService.register(user, object : AsyncCallback { override fun handleResponse(registeredUser: BackendlessUser) { Log.i(TAG, “User has been registered”) Backendless.Data.of(BackendlessUser::class.java).setRelation( registeredUser, “address:Address:1”, listOf(savedAddress), object : AsyncCallback { override fun handleResponse(response: Int?) { Log.i(TAG, “Relation has been set”) } override fun handleFault(fault: BackendlessFault) { Log.e(TAG, fault.message) } }) } override fun handleFault(fault: BackendlessFault) { Log.e(TAG, fault.message) } }) } override fun handleFault(fault: BackendlessFault) { Log.e(TAG, fault.message) } })
Address *address = [Address new]; address.state = @"Texas"; address.city = @"Dallas"; address.zip = @"75032"; address.street = @"123 Main St"; BackendlessUser *user = [BackendlessUser new]; user.email = @"green.goblin@backendless.com"; user.password = @"greeng0blin"; [[Backendless.shared.data of:[Address class]] saveWithEntity:address responseHandler:^(Address *savedAddress) { [Backendless.shared.userService registerUserWithUser:user responseHandler:^(BackendlessUser *registeredUser) { [[Backendless.shared.data of:[BackendlessUser class]] setRelationWithColumnName:@"address:Address:1" parentObjectId:registeredUser.objectId childrenObjectIds:@[savedAddress.objectId] responseHandler:^(NSInteger relationSet) { NSLog(@"Relation has been set"); } errorHandler:^(Fault *fault) { NSLog(@"Error: %@", fault.message); }]; } errorHandler:^(Fault *fault) { NSLog(@"Error: %@", fault.message); }]; } errorHandler:^(Fault *fault) { NSLog(@"Error: %@", fault.message); }];
let address = Address() address.state = "Texas" address.city = "Dallas" address.zip = "75032" address.street = "123 Main St" let user = BackendlessUser() user.email = "green.goblin@backendless.com" user.password = "greeng0blin" Backendless.shared.data.of(Address.self).save(entity: address, responseHandler: { savedAddress in Backendless.shared.userService.registerUser(user: user, responseHandler: { registeredUser in if let savedAddress = savedAddress as? Address, let addressId = savedAddress.objectId, let userId = registeredUser.objectId { Backendless.shared.data.of(BackendlessUser.self).setRelation(columnName: "address:Address:1", parentObjectId: userId, childrenObjectIds: [addressId], responseHandler: { relationSet in print("Relation has been set") }, errorHandler: { fault in print("Error: \(fault.message ?? "")") }) } }, errorHandler: { fault in print("Error: \(fault.message ?? "")") }) }, errorHandler: { fault in print("Error: \(fault.message ?? "")") })
const Backendless = require('backendless') /* Or use `import Backendless from 'backendless'` for client side. If you don't use npm or yarn to install modules, you can add the following line <script src="//api.backendless.com/sdk/js/latest/backendless.min.js"></script> to your index.html file and use the global Backendless variable. */ Backendless.initApp('YOUR_APP_ID', 'YOUR_JS_API_KEY') const user = new Backendless.User() user.email = 'spiderman@backendless.com' user.password = 'greeng0blin' const address = { street: '123 Main St', city : 'Dallas', state : 'Texas', zip : '75032', } const onSuccess = user => { console.log('User has been registered') console.log(user) } const onError = error => { console.error('Server reported an error: ', error.message) console.error('error code: ', error.code) console.error('http status: ', error.status) } const registerUser = async (user, address) => { const [newUser, userAddress] = await Promise.all([ Backendless.UserService.register(user), Backendless.Data.of('Address').save(address) ]) await Backendless.Data.of('Users').setRelation(newUser, 'address', [userAddress]) return newUser } registerUser(user, address) .then(onSuccess) .catch(onError)
BackendlessUser user = BackendlessUser() ..email = "spiderman@backendless.com" ..password = "greeng0blin"; Map address = { "street": "123 Main St", "city": "Dallas", "state": "Texas", "zip": "75032"}; Backendless.Data.of("Address").save(address).then((savedAddress) { print("Relation has been created"); Backendless.UserService.register(user).then((registeredUser) { print("User has been registered"); Backendless.Data.of("Users").setRelation(registeredUser.toJson(), "address:Address:1", children: [savedAddress] ).then((response) => print("Relation has been set")); }); });
Once you run the code above, the Users table shows the registered user and a link to the related Address object: