2017-09-14 17 views
0

firebase dbの親ノードからすべての子ノードをフェッチすることはできますか?この言おうとしボタンを押したときにGoogleマップマーカーを追加するにはどうすればよいですか?

this

を私は同時にすべての投稿を取得したいです。

これはビデオを取得しますが、現在のユーザーのビデオのみを取得します。私は同時にすべてのユーザーのビデオを取得したい。

fileprivate func fetchAllPost() { 
    fetchPosts() 
    fetchAllPostsFromUserIds() 
} 

fileprivate func fetchAllPostsFromUserIds() { 
    guard let uid = FIRAuth.auth()?.currentUser?.uid else { return } 
    FIRDatabase.database().reference().child("posts").child(uid).observeSingleEvent(of: .value, with: { (snapshot) in 

     guard let userIdsDictionary = snapshot.value as? [String: Any] else { return } 
     userIdsDictionary.forEach({ (key, value) in 
      FIRDatabase.fetchUserWithUid(uid: key, completion: { (user) in 
       self.fetchPostsWithUser(user: user) 
      }) 
     }) 
    }) { (err) in 
     print("failed to fetch following users ids:", err) 
    } 
} 

var posts = [Post]() 
fileprivate func fetchPosts() { 
    guard let currentUserID = FIRAuth.auth()?.currentUser?.uid else { return } 
    FIRDatabase.fetchUserWithUid(uid: currentUserID) { (user) in 
     self.fetchPostsWithUser(user: user) 
    } 
} 

fileprivate func fetchPostsWithUser(user: User) { 
    let ref = FIRDatabase.database().reference().child("posts/\(user.uid)/") 

    ref.observeSingleEvent(of: .value, with: { (snapshot) in 

     self.collectionView?.refreshControl?.endRefreshing() 

     guard let dictionaries = snapshot.value as? [String: Any] else { return } 
     dictionaries.forEach({ (key,value) in 

      guard let dictionary = value as? [String: Any] else { return } 
      var post = Post(user: user, dictionary: dictionary) 
      post.id = key 
      guard let uid = FIRAuth.auth()?.currentUser?.uid else { return } 
      FIRDatabase.database().reference().child("likes").child(key).child(uid).observe(.value, with: { (snapshot) in 
       if let value = snapshot.value as? Int, value == 1 { 
        post.hasLiked = true 
       } else { 
        post.hasLiked = false 
       } 
       self.posts.append(post) 

       self.posts.sort(by: { (p1, p2) -> Bool in 
        return p1.creationDate.compare(p2.creationDate) == .orderedDescending 
       }) 
       self.collectionView?.reloadData() 

      }, withCancel: { (err) in 
       print("Failed to fetch info for post") 
      }) 
      print(self.posts) 
     }) 
    }) { (error) in 
     print("Failed to fetch posts", error) 
    } 
    } 

答えて

1

を私はスウィフトを知らないが、あなたがFIRDatabase.database().reference().child("posts")を取得し、その後childrenを反復処理することができます:ここに は私がやっているのより多くの理解を得るためにいくつかのコードです。

+0

これは、ユーザーIDを繰り返し処理します。しかし、ユーザIDの内側の投稿ではありません –

+0

子スナップショットで 'children'を使用してください –

関連する問題