2016-04-28 10 views
0

初心者とFirebaseの両方に初心者!
swiftを使用してFirebaseのユーザタイプを確認してください

データベース
 選手
    ref.authdata.uid-用プレーヤー-1
    ref.authdata.uid-用プレーヤー-2:私はこのようになりますデータベースを持っています
    ref.authdata.uid-用-コーチ-1
    ref.authdata.uid-用プレーヤー-3
 コーチ私のアプリの    ref.authdata.uid-用-コーチ-2
    ref.authdata.uid-用-コーチ-3

半分は選手、コーチのための1のために構築されています。 ref.authData.uidの子がプレーヤまたはコーチの子供の下にあるかどうかを確認するにはどうすればよいですか?私のデータ構造は間違っていますか?

また、それぞれのuidには、私のダイアグラムには含まれていないより多くの子供がいて、各プレイヤー/コーチの情報が含まれています。以下は私の予備ビルドに使用しているauthメソッドです。任意の助け

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は良い答えを持っています(私はそれを受け入れます)。リンクされた答えも同様に機能します。

私は別の方法も追加したいと思います。コーチと選手たちは、すべてのユーザーなので、なぜ

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

これは、特定のコーチを照会することができますかでしょう

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" 

が、あなたはチームのノードを追加することができ、標準Firebase /ユーザーデザインパターンで行くではありませんプレーヤーとそのUIDを取得するだけでなく、どのチームがそのプレーヤーまたはコーチの一部であるかを知ることができます。チームを獲得して、コーチと選手が誰であるかを知ることもできます。

単なる考えです。

+0

これはすばらしいことですが、この構造は、このデータベースをさらに進化させようとしている他のいくつかのものの方がはるかに優れています。おかげでジェイ!私の最後の質問では、データベースに関して言及しました。私はそれがどのように役立つのか理解し始めています。 –

0

あなたの最初の質問については、私はあなたがコードのこのラインを使用することができ、あなたと一緒にこれらの親ノード内の任意のREF-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

これらのクエリは理にかなっています。 Parse(R.I.P)から来て、firebaseクエリの構造化は私にとっては新しいものです。 ソリューションの最後の部分が何をしているか説明できますか?私には、ユーザーのUIDがプレーヤーに存在するかどうかを確認し、プレイヤーのログインを実行し、同じUIDの "コーチ"をチェックせずにコーチログインを実行しないかどうかを確認するように見えます。私は正しい? –

+0

@JoeSloan 'もしsnapshot.valueがNSNullなら' {'と'もしあれば 'snapshot.value as? String == nil {'これらのブロックにある場合は、別のノードをチェックしてUIDが存在するかどうかを調べることができます。しかし、それはあなたが言ったように、プレイヤーにはありません。 – tobeiosdev

関連する問題