我的移動應用程式中有一個非常簡單的架構結構:
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 == $0", payment.uuid).length == 0) {
deposit.payments.push(createdDbPayment);
}
});
同時,當我嘗試記錄從 Realm 資料庫獲取的付款物件時,它看起來不是分配給該付款的一筆存款,而是一組存款。(ofc 只有一個物件,但很煩人)
問題是:有沒有辦法連接這個模式來呈現 One2Many(不是 many2many)關系?
我想實作:
payment.deposit.uuid而不是payment.deposit[0]?.uuid感謝您的幫助
uj5u.com熱心網友回復:
我想實作: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”功能來向存款添加付款。當付款被傳遞到存款屬性時,父存款將添加其對付款的參考,然后將其添加到付款串列中。
這將創建從存款到多個付款的前向關系,然后從付款回到其父存款的單個后向關系。
然后圖形可以在兩個方向上橫切。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/338119.html
上一篇:useEffect無法更新狀態
