2016-04-28 71 views
0

初學者可以在swift和Firebase中查看!我有一個看起來像這樣一個數據庫:
使用swift檢查Firebase中的usertype

數據庫
 球員
    ref.authdata.uid換球員-1
    ref.authdata.uid換球員-2
    ref.authdata.uid換球員-3
 教練
    ref.authdata.uid換教練1
    ref.authdata.uid換教練-2
    ref.authdata.uid換教練-3我的應用程序的

一半是專爲球員,一個教練。 如何檢查ref.authData.uid孩子是否在玩家或教練孩子之下?我的數據結構錯誤嗎?

另外,每個uid在它下面都有更多的孩子,我沒有在我的圖表中包含關於每個玩家/教練的信息。以下是我用於初步構建的身份驗證方法。

if ref.authData != nil { 

    print("There is already a user signed in!") 
    self.performSegueWithIdentifier("playerLogin", sender: self) 

} else { 
    // No user is signed in 
} 


感謝您的幫助!

回答

1

tobeisdev有一個很好的答案(我會接受它)和相關的答案也可以。

我想添加一個替代方案;因爲教練和球員都是用戶爲什麼不與標準火力地堡/用戶設計模式去

users 
    user_id_0 
    type: "player" 
    name: "Larry" 
    team: "team_id_0" 
    user_id_1 
    type: "player" 
    name: "Biff" 
    team: "team_id_0" 
    user_id_2 
    type: "coach" 
    name: "Benny" 
    team: "team_id_0" 

,那麼你可以添加一個團隊節點

teams 
    team_id_0 
    team_name: "nerds r' us" 
    coach: user_id_2 
    players: 
     user_id_0: true 
     user_id_1: true 

這將使您查詢具體的教練或玩家,並獲得他們的使用情況以及知道哪個球員或教練是其中的一員。你也可以得到一個球隊並且知道教練和球員是誰。

只是一個想法。

+0

這真棒,這個結構對於我將在這個數據庫中進行的其他一些事情會更好。謝謝Jay!在你提到的關於數據庫的最後一個問題中,「越平坦越好」;我開始明白這是如何派上用場的。 –

0

關於第一個問題,我可以與你進行搜索,並在這些父節點檢查任何裁判的uid,你可以使用這段代碼行的某些方面分享:

let REF_BASE = Firebase(url: "https://yourapp.firebaseio.com") 

REF_BASE.childByAppendingPath("players").observeEventType(.Value, withBlock: { snapshot in 

     for snap in snapshot.children { 
      let key = snap.key as String 
      if key == "ref.authdata.uid-for-player-2" { 
       print(snap.value as String) // to see its value 
      } 
     } 

    }) 

REF_BASE.childByAppendingPath("players").childByAppendingPath("ref.authdata.uid-for-player-2").observeSingleEventOfType(.Value, withBlock: { snapshot in 

     if snapshot.value as? String == nil { 
      print("in usage") 
     } 
     else { 
      print("free") 
     } 

    }) 

欲瞭解更多詳細看Jay's answer here

+0

Aaah好的這些查詢開始有意義。來自Parse(R.I.P)的Firebase查詢結構對我來說是一件新事物。 你能解釋一下你的解決方案的最後一塊嗎?對我來說,它看起來像檢查用戶的UID是否存在於玩家中,如果它確實執行玩家登錄,並且如果不執行教練登錄而沒有檢查相同UID的「教練」。我對嗎? –

+0

@JoeSloan'如果snapshot.value是NSNull {'和'如果snapshot.value爲? String == nil {「同樣的事情,如果它在這些塊中,你可以檢查另一個節點來提供你的UID是否存在。但它不是在玩家 - 就像你說的那樣。 – tobeiosdev