2015-09-18 12 views
6

私のレルムスキームにはGiftというテーブルがあります。今度はGift.classの名前をUserBonus.classに変更し、いくつかの新しいパラメータ(probではない)を追加する必要があります。これを行う正しい方法は何ですか?レルムテーブルの名前を変更してください

私はrealm.getTable()が私にテーブルを返すことができることを知って、問題が古いGiftがスキーマに存在しているが、実際に私がGift.classを持っていけないということである(今はUserBonusgetTable()である私に新しい作成したテーブルを返します)ので、私は昔の取得カントギフトテーブルの値を変更し、新しいボーナステーブルに移動します。

私はそれを見る唯一の方法は、Gift.classを空にして、マイグレーションのためだけに使用することです。何かアドバイスのため

おかげで、
Yakiv

答えて

2

は現在、私は次のようにそれを実装しました:

  • は新しいUserBonus.class
  • GiftからのすべてのデータがGift.class
  • コピーに@Deprecatedを追加追加しましたテーブルUserBonusテーブル

    // added bonus types 
    Table userBonus = realm.getTable(UserBonus.class); 
    userBonus.addColumn(ColumnType.STRING, "localId"); 
    userBonus.addColumn(ColumnType.INTEGER, "type"); 
    userBonus.addColumn(ColumnType.INTEGER, "date"); 
    userBonus.addColumn(ColumnType.STRING, "userName"); 
    userBonus.addColumn(ColumnType.STRING, "userNumber"); 
    userBonus.addColumn(ColumnType.STRING, "credits"); 
    
    // move Gift to UserBonus 
    RealmResults<Gift> gifts = realm.where(Gift.class).findAll(); 
    for (Gift gift :gifts) { 
        userBonus.add(
          gift.getLocalId(), 
          UserBonus.TYPE_FRIEND, 
          gift.getDate(), 
          gift.getUserName(), 
          gift.getUserNumber(), 
          gift.getCredits() 
        ); 
    } 
    realm.where(Gift.class).findAll().clear(); 
    
4

たぶん、私の答えは時代遅れになりますが、今Android上レルム方法のスキームでは、テーブル(モデル)の名前を変更することができ、「名前の変更」はあります。 コードは次のようになります。

RealmSchema schema = Realm.getInstance().getSchema(); 
schema.rename("OldModelName", "NewModelName"); 

これはうまくいくはずです。

また、移行のすべての機能(2015年6月25日以降) - https://github.com/realm/realm-java/pull/1239

関連する問題