有没有办法在领域中以正确的方式呈现 One2Many 关系?

Is there a way to present One2Many Relation in correct way in realm?

我的移动应用程序中有一个非常简单的模式结构:

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",
};

所以意味着每笔存款可以有零笔,一笔或几笔付款(可以部分支付),但是一笔付款只能分配给一笔存款

我将 Payment 对象放入 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 == [=11=]", payment.uuid).length == 0) {
        deposit.payments.push(createdDbPayment);
    }
});

与此同时,当我尝试记录从 Realm 数据库中获取的支付对象时,看起来我得到的不是一笔存款,而是一笔存款。 (ofc只有一个对象但是很烦人)

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

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

I would like to achieve: payment.deposit.uuid instead of payment.deposit[0]?.uuid

每当使用 LinkingObjects 时,它们都允许“自动”导航回父对象 - 然而,它们也会根据其性质创建多对多关系。

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

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

payment.deposit[0]?.uuid

LinkingObjects 的好处是为您创建了后台 link(它更像是计算 属性 而不是管理 属性)。另一方面,这并不是你想要的。

因此您需要手动创建背面 link - 在某些情况下它更有意义,但您失去了 'automatic' 关系。使用伪代码

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

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

这将创建从存款到多个付款的正向关系,然后从付款到其父存款的单一反向关系。

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