2017-03-17 6 views
1

私はfirebaseを学び、自分のデータを構造化する最良の方法を見つけようとしています。異なるクエリの構造データ

単純な休暇申請の例を使用してください。従業員は葉を提出し、閲覧することができます。管理者は葉書を承認することができます。

オプション1

オプション1で
"leaves": [ 
{ 
    "employee": "pCIUfttSrXQ1dLPDwH7j9GExCkA2", 
    "date": "2017-03-01", 
    "status": "pendingApproval", 
}, 
{ 
    "employee": "YSJCAe4wZdYCplA3e0ejMqzQmEF3", 
    "date": "2017-01-01", 
    "status": "approved" 
}] 

、フィルタリングは両方のケースで必要とされます。

  • 従業員が
  • ( "従業員" によってフィルタ)彼の休暇の履歴を一覧表示します管理者は保留中のすべての葉を一覧表示します(「ステータス=保留」によるフィルタ)
オプション2では

オプション2

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

保留中の葉を一覧表示するには、従業員が自分の休暇の履歴を一覧表示したときに、何のフィルタリングは必要ありませんが、フィルタリングが必要です(と私は方法がわからない)管理者のために。

データを構造化する正しい方法は何でしょうか?オプション2の場合、すべての従業員の保留中の葉をどのようにフィルタリングしますか?

答えて

1

2番目のオプションを使用します。

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 

    }) 
:保留中のクエリ、使用を通してフィルタリングするマネージャについて

関連する問題