2015-09-18 83 views
6

我在我的領域方案中有一個Gift表。現在我需要將Gift.class重命名爲UserBonus.class並添加一些新的參數(不是概率)。什麼是正確的方法來做到這一點?重命名領域表

我知道realm.getTable()可以回到我的表,問題是,老Gift存在的模式,但是,其實我沒有Gift.class(現在是UserBonusgetTable()將返回我新創建的表),所以我不能得到老贈送表值並將它們移動到新的獎勵表中。

我看到它的唯一方法是留空Gift.class並僅將其用於遷移。

感謝您的任何建議,
Yakiv

回答

2

目前我沒有實現它如下:

  • 增加了新的UserBonus.class
  • 加入@Deprecated到Gift.class
  • 複製所有數據從Gift表格至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