【问题标题】:Realm JS/ React-Native: How to rename a table/entityRealm JS/ React-Native:如何重命名表/实体
【发布时间】:2022-01-12 14:36:38
【问题描述】:

上下文: 我有一个适用于 iOS 和 Android 的应用程序;其中 iOS 版本是原生的,Android 版本是 React-Native 的。我从两个单独的对象方案开始,但现在我想修改 Android(React-Native)方案,以便所有实体都等于我的 iOS 版本。我想这样做是为了在测试时可以轻松地交换数据库文件,并且因为我想实现跨平台的云同步。

发生了什么

假设我有这两个实体:

  static schema: Realm.ObjectSchema = {
    name: 'DBGame',
    primaryKey: 'id',
    properties: {
      id: 'string',
      players: 'DBPlayer[]',
    },
  };

  static schema: Realm.ObjectSchema = {
    name: 'DBPlayer',
    primaryKey: 'id',
    properties: {
      id: 'string',
      games: {type: 'linkingObjects', objectType: 'DBGame', property: 'players'},
    },
  };

如果我想将这些实体从 DBGameDBPlayer 重命名为 RSGameRSPlayer,我会:

  • 增加我的架构版本号
  • 打开领域时添加迁移功能

.. 然后呢?当我重命名架构名称时,Realm 将根本无法打开,因为它找不到具有新架构名称的表(这是有道理的,因为它们尚未迁移)。

问题 现在看来,在 JS 中重命名 Realm 表的唯一方法是在旧模式之外创建新模式并保持它们都处于活动状态,直到所有用户都迁移。然而,这看起来很丑陋和hacky。

在 Realm JS / Realm React-Native 中重命名表/实体的正确方法是什么?

【问题讨论】:

  • 我在大型项目中使用了领域,我遇到了这个问题,这似乎是唯一的出路,因为我做了和你一样的事情,我也必须关注这个问题,因为要去通过从旧到新的领域文档,我似乎找不到任何出路

标签: javascript react-native realm database-migration realm-migration


【解决方案1】:

有几点:

Realm Migrations 不适用于 Realm Sync - 它们仅适用于本地 Realms。

目前,Realm Sync 的流程是更新您的代码,删除所有本地数据并允许 Realm Sync 重新下载所有数据。

另一件事是 Realm 没有表 - Realm 是一个对象数据库,而不是 SQL。只有对象,所以一旦你的本地数据被删除并更新了对象,你就准备好了。

【讨论】:

    猜你喜欢
    • 2015-12-26
    • 2020-02-17
    • 2015-08-22
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 2017-01-13
    相关资源
    最近更新 更多