我有一个非常简单的模式结构在我的移动应用程序:
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",
};
So意味着每个存款可以有零,一个或几个付款(可以部分支付),但是一个付款应该只分配给一个存款
我把支付对象到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
谢谢帮助
我想实现:payment.deposit.uuid而不是payment.deposit [0] ? .uuid
当使用linkobject时,它们允许"自动"导航回父对象——然而,它们也创建了一个多-多关系。
这就是为什么它是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"函数将付款添加到"存款"。当付款传递给Deposit属性时,父Deposit将把它的引用添加到付款,然后将其添加到Payments List。
这将创建一个从Deposits到多个Payments的向前关系,然后创建一个从Payment返回到它的父Deposit的向后关系。
则图形可以在两个方向上横截。