Create a Relation With User

I wonder if there is any way to declare the relation between User (that is offered by backendless) table and the other table ? In the doc there is a relation between table to table

Person personObject = // personObject retrieval is out of scope in this example
Address addressObject = // addressObject retrieval is out of scope in this example

ArrayList addressCollection = new ArrayList();
addressCollection.add( addressObject );

Backendless.Data.of( Person.class ).setRelation( personObject, “address”, addressCollection,
new AsyncCallback()
{
@Override
public void handleResponse( Integer response )
{
Log.i( “MYAPP”, “relation has been set”);
}

@Override
public void handleFault( BackendlessFault fault )
{
Log.e( “MYAPP”, "server reported an error - " + fault.getMessage() );
}
} );

You can declare relation to users in the same way. Instead of:

Backendless.Data.of( Person.class ).setRelation( personObject, "address", addressCollection,

use something like the following:

Backendless.Data.of( Person.class ).setRelation( personObject, "user", userCollection,

Thank you for you time. I have attached the image which describe what i wanted to do

I want to create a relation in this User table that is created by the backendless so it points the user to the UserInformation table which contains the detail information about the user
i.e age passport no visa etc

You want the Users table have a relation column which points to the UserInformation table, is that correct?

Yes, Exactly but i do not know how can i achieve that

User userObject = // userObject retrieval is out of scope in this example
UserInformation userInfoObject = // userInfoObject retrieval is out of scope in this example

ArrayList userInfoCollection = new ArrayList();
userInfoCollection.add( userInfoObject );

Backendless.Data.of( BackendlessUser.class ).setRelation( userObject, “userInfo”, userInfoCollection,
new AsyncCallback()
{
@Override
public void handleResponse( Integer response )
{
Log.i( “MYAPP”, “relation has been set”);
}

@Override
public void handleFault( BackendlessFault fault )
{
Log.e( “MYAPP”, "server reported an error - " + fault.getMessage() );
}
} );

Thank you for your time @mark-piller

Below is my code if you help me the User class that you define in solution, is it from backendless ? How can i access Users table ?

UserInformation userInformation = new UserInformation() ;

ArrayList<UserInformation> userInfoCollection = new ArrayList<UserInformation>();

userInformation.setName(sharedPreferences.getString(“userName”, “xyz”));
userInformation.setPassportNo(sharedPreferences.getString(“passportNo”, “234”));
userInformation.setDateOfBirth(sharedPreferences.getString(“dateOfBirth”, “sdf”));

userInfoCollection.add( userInformation );

Backendless.Data.of( BackendlessUser.class ).setRelation( userObject, “userInfo”, userInfoCollection,
new AsyncCallback()
{
@Override
public void handleResponse( Integer response )
{

}

@Override
public void handleFault( BackendlessFault fault )
{

}
} );

Yes, the BackendlessUser class comes from the Backendless SDK for Android/Java.

I have declare no column like userInfo in the console through CONSOLE
My Dynamic Schema is On

I run the below code but it give me error

Unable to create relation , unknown column name ‘userInfo’. Make sure the column is created first with the ‘column creation API’ or in Backendless Console

1.What is column creation API ?
2.I want to do the job with the API

BackendlessUser user = new BackendlessUser() ;

UserInformation userInformation = new UserInformation() ;
ArrayList<UserInformation> userInfoCollection = new ArrayList<UserInformation>();

userInformation.setName(sharedPreferences.getString(“userName”, “xyz”));
userInformation.setPassportNo(sharedPreferences.getString(“passportNo”, “234”));
userInformation.setDateOfBirth(sharedPreferences.getString(“dateOfBirth”, “sdf”));

userInfoCollection.add( userInformation );

Backendless.Data.of( BackendlessUser.class ).setRelation(user, “userInfo”, userInfoCollection,
new AsyncCallback<Integer>() {
@Override
public void handleResponse(Integer response) {

Toast.makeText(H_UserAgreement_Agreed.this, “Data Saved”, Toast.LENGTH_SHORT).show();
}

@Override
public void handleFault(BackendlessFault fault) {
Toast.makeText(H_UserAgreement_Agreed.this, fault.getMessage(), Toast.LENGTH_SHORT).show();
}
});

So i add this line of code in the code block

user.setPropert("userInfo" , "");

then throw error

:thinking::thinking: in relation case version 3 was better

What does the error say?

Unable to create relation , unknown column name ‘userInfo’. Make sure the column is created first with the ‘column creation API’ or in Backendless Console

Well, for one, your code doesn’t follow the rule described in the documentation:

https://backendless.com/docs/android/data_relations_set_add_overview_android.html![Java%20API%20Documentation%202019-03-04%2013-23-45|597x500](upload://rE9s3X6ZnNZUT92RHRMG35fr6H0.jpeg)

As for the column name in the API call, you should read the documentation as well:
https://backendless.com/docs/android/data_add_relation_with_objects_android.html

Regards,
Mark

Thank you for your time. I will look into the doc one more time