有没有办法在领域中以正确的方式呈现 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”功能来向存款添加付款。当付款传递到存款 属性 时,父存款将添加对付款的引用,然后将其添加到付款列表中。
这将创建从存款到多个付款的正向关系,然后从付款到其父存款的单一反向关系。
那么图形可以在两个方向上横切
我的移动应用程序中有一个非常简单的模式结构:
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”功能来向存款添加付款。当付款传递到存款 属性 时,父存款将添加对付款的引用,然后将其添加到付款列表中。
这将创建从存款到多个付款的正向关系,然后从付款到其父存款的单一反向关系。
那么图形可以在两个方向上横切