2017-01-06 76 views
0

我需要條件代碼來讀取Firebase中的數據。我想像SQL中的條件「WHERE project ='test'」。我寫在Swift中。從Firebase有條件地讀取數據

我從火力地堡此代碼爲讀取數據:

var ref:FIRDatabaseReference? 
var databaseHandle:FIRDatabaseHandle? 
var tasks = [Task]() 
var uid = (FIRAuth.auth()?.currentUser?.uid)! as String 

override func viewDidLoad() { 
    super.viewDidLoad() 

    ref = FIRDatabase.database().reference().child("\(uid)/Tasks") 

    startObservetingDB() 
} 

func startObservetingDB() { 
    ref?.observe(.value, with: { (snapshot:FIRDataSnapshot) in 
     var newSweets = [Task]() 

     for sweet in snapshot.children { 
      let sweetObject = Task(snapshot: sweet as! FIRDataSnapshot) 
      newSweets.append(sweetObject) 
     } 

     self.tasks = newSweets 
     self.tableView.reloadData() 

    }) { (error:Error) -> Void in 
     print(error.localizedDescription) 
    } 
} 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "TasksCell", for: indexPath) as! TasksCell 

    let arrayTasks = tasks[indexPath.row] 

    cell.taskName.text = arrayTasks.content 

    return cell 
} 

而且我有這樣的火力地堡結構:

My Firebase structure

誰能幫助我嗎?

回答

0

你可以得到任務與特定項目:

ref?.queryOrdered(byChild: "project").queryEqual(toValue: "test").observe(.childAdded 

但你可能還需要考慮,如果你的數據結構是最適合您的使用。你最經常(甚至總是)可能會顯示特定項目的任務。在這種情況下,它是更有效的數據存儲在該結構:

ProjectTasks 
    $ProjectId (e.g. "test") 
     $TaskId ("asd asd se") 

順便說一句:這個答案似乎高度相關:query & where in Firebase (swift 3)

+0

非常感謝你的答案,但如果我改變結構,如何我可以編輯「$ ProjectId(例如」測試「)」嗎?我知道我必須使用「updateChildValues」,但我不知道如何使用它。 – user7355869

+0

您的項目ID應該是自動生成的無意義密鑰。你不應該編輯它。您的項目的名稱是元數據,它應該是一個屬性的值。例如。 '/ Projects/$ ProjectId:{name:「test」}'。 –

相關問題