2017-03-10 2 views
0

Wie kann ich die Funktion fetchAllPosts in meiner Netzwerkdatei und in der homeviewController ändern, sodass ich nur Posts aus der Datenbank bekomme, die mit der UID des Benutzers übereinstimmen, den ich mit der post.UID befolge, sodass mein Feed mit Posts gefüllt ist von Benutzern, denen ich folge?Wie filtere ich Daten aus meiner Firebase-Datenbank?

Hier zeigt die Referenz, wie ich einen neuen Mitläufer in der Datenbank vornehmen:

let followingRef = "following/" + (self.loggedInUserData?["uid"] as! String) + "/" + (self.otherUser?["uid"] as! String) 

Hier ist die Stützstruktur in der Datenbank Firebase

posts 
    -Ke4gQKIbow10WdLYMTL (generated key) 
     postDate: 
     postId: 
     postPicUrl: 
     postText: 
     postTit: 
     type: 
     uid: looking to match this 

Hier wird die aktuelle fetchAllPosts Funktion in der ist Netzwerkdatei

func fetchAllPosts(completion: @escaping ([Post])->()) { 

    let postRef = self.dataBaseRef.child("posts") 
    postRef.observe(.value, with: { (posts) in 

     var resultsArray = [Post]() 
     for post in posts.children { 

      let post = Post(snapshot: post as! FIRDataSnapshot) 
      resultsArray.append(post) 

     } 

     completion(resultsArray) 

    }) { (error) in 
     print(error.localizedDescription) 
    } 

    } 

Hier ist die FetchAllPosts-Funktion in der HomeVi ewController

private func fetchAllPosts(){ 
    authService.fetchAllPosts {(posts) in 
     self.postsArray = posts 
     self.postsArray.sort(by: { (post1, post2) -> Bool in 
      Int(post1.postDate) > Int(post2.postDate) 
     }) 

     self.tableView.reloadData() 
    } 
} 

Hier ist mein Beitrag Struktur in meiner schnellen Datei:

struct Post { 


    var username: String! 
    var uid: String! 
    var postId: String! 
    var type: String 
    var postText: String 
    var postTit: String 
    var postPicUrl: String! 
    var postDate: NSNumber! 
    var ref: FIRDatabaseReference! 
    var key: String = "" 

    init(postId: String,postText: String, postTit:String, postDate:NSNumber, postPicUrl: String?, type:String, uid: String, key: String = ""){ 

     self.postText = postText 
     self.postTit = postTit 
     self.postPicUrl = postPicUrl 
     self.type = type 
     self.uid = uid 
     self.postDate = postDate 
     self.postId = postId 

    } 

    init(snapshot: FIRDataSnapshot){ 

     self.ref = snapshot.ref 
     self.key = snapshot.key 
     self.postId = (snapshot.value! as! NSDictionary)["postId"] as! String 
     self.type = (snapshot.value! as! NSDictionary)["type"] as! String 
     self.postPicUrl = (snapshot.value! as! NSDictionary)["postPicUrl"] as! String 
     self.postDate = (snapshot.value! as! NSDictionary)["postDate"] as! NSNumber 
     self.postTit = (snapshot.value! as! NSDictionary)["postTit"] as! String 
     self.uid = (snapshot.value! as! NSDictionary)["uid"] as! String 
     self.postText = (snapshot.value! as! NSDictionary)["postText"] as! String 
    } 


    func toAnyObject() -> [String: Any] { 
     return ["postId":self.postId,"type":self.type, "postPicUrl":self.postPicUrl,"postDate":self.postDate, "postTit":self.postTit,"uid": self.uid, "postText":self.postText,] 
    } 
} 

Antwort

0

Haben Sie diese verwenden;

postRef.queryOrdered(byChild: "uid").queryEqual(toValue: yourUid).observe(.value, with: { 
        snapshot in 

       if let shot = snapshot { 
        let post = Post(snapshot: post as! FIRDataSnapshot) 
       } 

    } 

Dies liefert Daten, die Sie suchen.

Verwandte Themen