2017-03-17 42 views
1

我在學習firebase並試圖找到構建我的數據的最佳方法。針對不同查詢的結構數據

使用簡單離開應用程序的示例。員工可以提交和查看他們的葉子。經理可以批准葉子。

選項1

"leaves": [ 
{ 
    "employee": "pCIUfttSrXQ1dLPDwH7j9GExCkA2", 
    "date": "2017-03-01", 
    "status": "pendingApproval", 
}, 
{ 
    "employee": "YSJCAe4wZdYCplA3e0ejMqzQmEF3", 
    "date": "2017-01-01", 
    "status": "approved" 
}] 

對於選項1,篩選將在兩種情況下需要:

  • 當員工(由 「僱員」 過濾器)
  • 當列出了他離開的歷史經理列出所有待處理的葉子(按「狀態=未決」進行過濾)

選項2

"leaves": 
{ 
    "pCIUfttSrXQ1dLPDwH7j9GExCkA2" : [ 
    { 
    "date": "2017-03-01", 
    "status": "pendingApproval" 
    } 
    ], 
    "YSJCAe4wZdYCplA3e0ejMqzQmEF3" : [ 
    { 
    "date": "2017-01-01", 
    "status": "approved" 
    } 
    ] 
} 

對於選項2,當員工列出了他離開的歷史,但需要過濾(我不知道怎麼做)的經理名單待定葉不需要過濾。

什麼應該是構造數據的正確方法?如果是選項2,我們將如何過濾所有員工的待處理留言?

回答

1

使用第二個選項;

對於管理者通過懸而未決的查詢過濾器,使用方法:

FIRDatabase.database().reference().child("leaves").queryOrdered(byChild: "status").queryEqual(toValue: "pending").observeSingleEvent(of: .value, with: {(Snapshot) in 


     print(Snapshot.value!) 


     // If you have multiple pending request you gotta loop through them   
     // using for loop, access them as separate entity and operate on them 

    })