2015-09-18 52 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