2017-10-18 2 views
0

私はここで説明するように働くに深い節約を得るに苦労しています: http://www.baqend.com/guide/topics/deep-loading/#deep-savingディープセイビングを働かせるには?

私はユーザーを作成したいよその後すぐに戻って、これらの新しく作成された参照を保存し、将来のデータのためのいくつかのプレースホルダオブジェクトを生成ユーザーテーブルに追加します。ここで

はネイティブリアクトのために私のコードです:これが実行されると

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) 
     }) 
    }) 
    } 

、次の処理が行われます。

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 

私はここで間違ってやって上の任意のヒント?

+0

次の投稿では、新しいオブジェクトを 'User.UserData'に設定しました。この例では' newUserData.doNext'を使用しました。スキーマ内でdoNextプロパティを宣言しましたか?ガイドの 'doNext'プロパティは、スキーマで宣言された通常のオブジェクト参照プロパティです。 – hannes

答えて

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

これは、別のセーブせずに動作するはずです。

0

私の問題は、これらのUserData、UserDataPrivate、およびUserStatusが実際にはUserを参照しており、互いに関係していないということです。

これは動作します:

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(User => { 
     console.log(db.me.id) 
     db.User.load(db.User.me.id).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.save() 
      newUserDataPrivate.save() 
      newUserStatus.save() 
      User.UserData = newUserData; 
      User.UserDataPrivate = newUserDataPrivate; 
      User.UserStatus = newUserStatus; 
      return User.update().then (() => { 
      this.props.navigation.dispatch(createAccountResetStack) 
      }); 
     }) 
     }) 
     .catch(error => { 
     alert(error.message) 
     }) 
    }) 
    } 
関連する問題