Search code examples
baqend

How to get Deep Saving to work?


I'm having a hard time getting deep saving to working as described here: http://www.baqend.com/guide/topics/deep-loading/#deep-saving

I'm wanting to create a user then immediately generate some place holder objects for future data, then save those newly created references back to the user table.

Here is my code for React Native:

  handleRegister = (event) => {
    this.setState({ loading: true })
    username = this.state.cellphone.replace(/\D/g,'');
    db.ready().then((db) => {
      var newUser = new db.User({
        'username': username
      });
      db.User.register(newUser, this.state.password)
      .then(() => {
        var newUserData  = new db.UserData({
          User: db.User.me,
        });
        var newUserDataPrivate  = new db.UserDataPrivate({
          User: db.User.me,
          phone: username,
        });
        var newUserStatus  = new db.UserStatus({
          User: db.User.me,
          status: 0,
          licenseVerified: false,
          backgroundChecked: false,
          hourlyRate: 0,
          lastUpdater: null,
        });
        newUserData.doNext = newUserDataPrivate;
        newUserDataPrivate.doNext = newUserStatus;
        newUserData.save({depth: 2})
        .then (() => {
          console.log(newUserData.id)
          console.log(newUserDataPrivate.id)
          console.log(newUserStatus.id)
          //update the User with references after I get the IDs
          //this.props.navigation.dispatch(createAccountResetStack)
        })
      })
      .catch(error => {
        alert(error.message)
      })
    })
  }

When this is run, the following happens:

1) User is created
2) Object in UserData is created with reference to newly created user id
3) the console.log for UserData returns the id of the UserData object
4) the console.log for UserDataPrivate prints null, 
5) the console.log for UserStatus prints null
6) the UserDataPrivate and UserStatus objects are not saved to the database

Any tips on what I'm doing wrong here?


Solution

  • User.UserData = newUserData;
    User.UserDataPrivate = newUserDataPrivate;
    User.UserStatus = newUserStatus;
    return User.save({ depth: 1 }).then (() => {
        this.props.navigation.dispatch(createAccountResetStack)
    });
    

    This should work without the separate saves.