【问题标题】:Is there a way to present One2Many Relation in correct way in realm?有没有办法在领域中以正确的方式呈现 One2Many 关系?
【发布时间】:2021-10-25 15:41:22
【问题描述】:

我的移动应用中有一个非常简单的架构结构:

export const DepositSchema = {
  name: "Deposit",
  properties: {
    uuid: "string",
    payments: "Payment[]",
  },
  primaryKey: "uuid",
};

export const PaymentSchema = {
  name: Instance.Payment,
  properties: {
    payment_amount: "string",
    payment_method: "string",
    deposit: {
      type: "linkingObjects",
      objectType: "Deposit",
      property: "payments",
    },
  },
  primaryKey: "uuid",
};

因此意味着每笔存款可以有零、一笔或几笔付款(可以部分支付),但一笔付款应该只分配给一笔存款

我将支付对象放入 Realm 数据库,如下所示:

database.manager.write(() => {
    if (payment.deposit_uuid) {
        deposit = database.manager.objectForPrimaryKey("Deposit", payment.deposit_uuid);
    }
    const createdDbPayment = database.manager.create(
        Instance.Payment,
        {
            ...payment,
            status: STATUS_TO_IGNORE,
        },
        Realm.UpdateMode.Modified,
    );
    if (deposit && createdDbPayment && deposit.payments.filtered("uuid == $0", payment.uuid).length == 0) {
        deposit.payments.push(createdDbPayment);
    }
});

同时,当我尝试记录从 Realm 数据库获取的付款对象时,看起来我没有分配给这笔付款的一笔存款,而是获得了一系列存款。 (ofc 只有一个对象,但很烦人)

问题是:有没有办法连接这个模式来呈现 One2Many(不是 many2many)关系?

我想实现: payment.deposit.uuid 而不是 payment.deposit[0]?.uuid感谢帮助

【问题讨论】:

    标签: react-native realm realm-js


    【解决方案1】:

    我想实现:payment.deposit.uuid 而不是 payment.deposit[0]?.uuid

    每当使用 LinkingObjects 时,它们都允许“自动”导航回父对象 - 但是,它们本质上也会创建多对多关系。

    这就是为什么它是LinkingObjects(复数)而不是LinkingObject

    如果只有一个可以链接回,那么您的代码将使用索引 0 来引用第一个元素

    payment.deposit[0]?.uuid
    

    LinkingObjects 的好处是为您创建了反向链接(它更多的是计算属性而不是托管属性)。另一方面,它并不是你想要的。

    因此,您需要手动创建反向链接 - 在某些情况下它更有意义,但您会失去“自动”关系。使用伪代码

    export const DepositSchema = {
      name: "Deposit",
      properties: {
          payments: "Payment[]"
        
    export const PaymentSchema = {
      name: Payment,
      properties: {
        parent_deposit: "Deposit"
    

    我建议添加一个“addPayment”函数来为存款添加付款。当付款被传递到存款属性时,父存款将添加其对付款的引用,然后将其添加到付款列表中。

    这将创建从 Deposits 到多个 Payments 的正向关系,然后创建从 Payments 到其父 Deposit 的单个反向关系。

    那么图形就可以在两个方向上横切了。

    【讨论】:

      猜你喜欢
      • 2015-10-24
      • 1970-01-01
      • 2015-08-06
      • 2023-02-16
      • 2023-03-15
      • 2017-01-10
      • 1970-01-01
      • 2021-04-29
      • 2021-02-19
      相关资源
      最近更新 更多